Spring中bean的初始化方法
来源:互联网 发布:微信群发软件 编辑:程序博客网 时间:2024/06/05 03:03
在Spring中有3种初始化bean的方式。分别是1.构造器初始化、2.静态工厂方法初始化、3.实力工厂初始化
1.构造器初始化
使用构造器初始化对象的时候,使用的是类的默认构造方法。如果要使用有参数的构造方法的话,那属于属性注入的部分了,暂时不讲
在配置文件中做如下配置
<bean id="demo2" class="com.hwkj.demo.action.Demo2"/>
class中的值为类的全路径名,id中的值类似于key
使用默认的配置,spring中创造出来的bean是单例的,如下代码的结果是
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml"); Demo2 demo2 = (Demo2) ctx.getBean("demo2"); Demo2 demo21 = (Demo2) ctx.getBean("demo2"); Demo2 demo22 = (Demo2) ctx.getBean("demo2"); System.out.println(demo2); System.out.println(demo21); System.out.println(demo22);
结果:
this is Demo2 constructor...com.hwkj.demo.action.Demo2@69a0bc8acom.hwkj.demo.action.Demo2@69a0bc8acom.hwkj.demo.action.Demo2@69a0bc8a
2.静态工厂方法初始化bean
在Demo3这个类中 提供一个静态方法,用来返回Demo2对象
public class Demo3 {public Demo3(){System.out.println("this is Demo3 constructor...");}public static Demo2 getDemo2() {return new Demo2();}}
配置文件中关键就是加一个属性factory-method
<bean id = "demo2" class="com.hwkj.demo.action.Demo3" factory-method="getDemo2"></bean><pre name="code" class="html">factory-method 中的值是Demo3中的静态方法名初始化出来的bean依然是单例的
Demo3类代码如下:
public class Demo3 {public Demo3(){System.out.println("this is Demo3 constructor...");}public static Demo2 getDemo2() {return new Demo2();}}
运行以下代码
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");Demo2 demo2 = (Demo2) ctx.getBean("demo2");Demo2 demo21 = (Demo2) ctx.getBean("demo2");Demo2 demo22 = (Demo2) ctx.getBean("demo2");System.out.println(demo2);System.out.println(demo21);System.out.println(demo22);System.out.println("========================");System.out.println(Demo3.getDemo2());System.out.println(Demo3.getDemo2());
<span style="color:#FF0000;"><strong>结果</strong></span>:
this is Demo2 constructor...com.hwkj.demo.action.Demo2@8ecf5c7com.hwkj.demo.action.Demo2@8ecf5c7com.hwkj.demo.action.Demo2@8ecf5c7========================this is Demo2 constructor...com.hwkj.demo.action.Demo2@7cfbe064this is Demo2 constructor...com.hwkj.demo.action.Demo2@7c490556
从结果中可以看出,使用 new ClassPathXmlApplicationContext(String name);这种方式将配置文件加载到内存中,Spring就会去初始化配置文件中的bean,并且初始化出来的bean是单例的。
分隔线下方的Demo2的对象就不属于Spring管理,它不是由Spring创建出来的
而且从结果中我们可以看出Sping在初始Demo2对象的时候,并没有去执行Demo3的构造方法,也就是说使用静态工厂方法初始化bean的时候,不需要去实例化这个工厂类。换个思路也可以理解,getDemo2()这个方法本来就是Demo3的静态方法,因此不需要Demo3的实例就可以直接是Dmo3类来调用getDemo2()方法。
3.实例工厂方法初始化
实例工厂类代码如下:
public class Demo4 {public Demo4(){System.out.println("this is Demo4 constructor...");}public Demo2 getDemo2() {return new Demo2();}}配置文件如下:
<bean id="demo2" factory-bean="demo4" factory-method="getDemo2"></bean> <bean id="demo4" class="com.hwkj.demo.action.Demo4"></bean>
使用实例工厂方法初始化bean的时候必须也要初始化实例工厂类
运行如下代码
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");Demo2 demo2 = (Demo2) ctx.getBean("demo2");Demo2 demo21 = (Demo2) ctx.getBean("demo2");Demo2 demo22 = (Demo2) ctx.getBean("demo2");System.out.println(demo2);System.out.println(demo21);System.out.println(demo22);System.out.println("=========================");Demo4 demo4 = (Demo4) ctx.getBean("demo4");Demo4 demo41 = (Demo4) ctx.getBean("demo4");Demo4 demo42 = (Demo4) ctx.getBean("demo4");Demo4 demo43 = (Demo4) ctx.getBean("demo4");System.out.println(demo4);System.out.println(demo41);System.out.println(demo42);System.out.println(demo43);
结果:
this is Demo4 constructor...this is Demo2 constructor...com.hwkj.demo.action.Demo2@1dfd90d9com.hwkj.demo.action.Demo2@1dfd90d9com.hwkj.demo.action.Demo2@1dfd90d9=========================com.hwkj.demo.action.Demo4@7230a5f0com.hwkj.demo.action.Demo4@7230a5f0com.hwkj.demo.action.Demo4@7230a5f0com.hwkj.demo.action.Demo4@7230a5f0
从结果可以看到,在将配置文件载入内存后就是实例化了Demo2和Demo4的对象,并且是单例的
0 0
- Spring中bean的初始化方法
- Spring中Bean初始化的三种方法
- spring bean 基于xml的4中初始化方法
- [Spring]Spring Bean的初始化 ---- getBean方法
- Spring初始化Bean方法
- Spring中bean初始化时机初始化方法和销毁方法
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- spring两种初始化bean的方法
- Spring中Bean的初始化过程
- 关于Spring 中初始化bean的过程
- Spring中Bean的初始化顺序
- spring中bean的初始化过程
- 在Spring容器中Bean的几种初始化、销毁方法的实现和先后顺序
- Spring——Bean的初始化方法和销毁方法
- spring中bean初始化过程
- 生产者消费者模式引子
- HDU 2020 绝对值排序
- 第12周项目2 - 摩托车继承自行车和机动车
- 查找最小的k个元素(堆处理和非堆处理)
- Android FragmentPagerAdapter 数据刷新问题
- Spring中bean的初始化方法
- Python学习之四sys.argv
- 高并发服务器学习之原子性
- CentOS6.5 yum安装nginx
- 手把手教你肢解钓鱼网站
- input type=file 服务器端上传文件
- PHP foreach()语句的一个诡异问题
- Two sum(在数组中找两个数,使其和为指定值)
- Internal Sorting: Comparison counting: Sorting by counting