Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例
1、定义Demo类:
package com.rhythmk.spring; public class User { public void Init () { System.out.println("User 对象被 创建!"); } // 计数器 public int Count=0; public void Say() { this.Count++; System.out.println("User 被"+this.Count+"次初始!"); } public void Destory() { System.out.println("User 对象被销毁!"); } }
2、init-method:对象初始执行
destroy-method:对象销毁执行:
<bean id="user" class="com.rhythmk.spring.User" init-method="Init" destroy-method="Destory" > </bean>
执行单元测试:
@Test public void test() { BeanFactory bean=new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User)bean2.getBean("user"); user.Say(); } 输出: User 对象被 创建! User 被1次初始!
3、scope 包括 singleton单例模式 (默认)
prototype,Request, Session, Global Session
默认applicationContext.xml 配置 添加测试代码:
private static BeanFactory bean= new ClassPathXmlApplicationContext("applicationContext.xml"); @Test public void test1() { User user=(User)bean.getBean("user"); user.Say(); } @Test public void test2() { User user=(User)bean.getBean("user"); user.Say(); }
输出:
User 对象被 创建!
User 被1次初始!
User 被2次初始!
修改applicationContext.xml 添加 scope=prototype
<bean id="user" class="com.rhythmk.spring.User" init-method="Init" destroy-method="Destory" scope="prototype"> </bean>
执行如上测试代码:
输出:
User 对象被 创建!
User 被1次初始!
User 被1次初始!
4、 lazy-init 默认为 false ,为true时,则在执行“BeanFactory bean= new ClassPathXmlApplicationContext("applicationContext.xml");”
并未执行初始化,只有在 bean.getBean("user") 才会执行函数初始:
package com.rhythmk.spring; public class User { // 计数器 public int Count=0; public User() { System.out.println("User 被"+this.Count+"次初始!"); } public void Say() { this.Count++; System.out.println("User.Say!"); } }
4.1 、默认配置:
<bean id="user" class="com.rhythmk.spring.User" lazy-init="false" > </bean>
输出:
User 被0次初始!
开始执行测试!
User.Say!
4.2 、调整配置:
<bean id="user" class="com.rhythmk.spring.User" lazy-init="true" > </bean>
输出:
开始执行测试!
User 被0次初始!
User.Say!
一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。