Spring:bean的生命周期

指定bean的作用域

Spring:bean的生命周期_第1张图片

singleton表示单例模式,每次获取的都是同一个实例。可以通过设置lazy-init属性标明是否延迟加载,还可以通过设置全局的延迟加载特性指定所有的bean都延迟加载

<beans default-lazy-init="true"...>

prototype表示原型模式,每次获取的都是新的实例,一般设置action为这种方式。

其他的三种针对WEB应用有效,分别表示request域、session域、globalsession域有效。


指定bean的初始化和销毁方法【肯定是通过Method反射调用】

<bean id="userDao"scope="singleton"

    init-method="init"

    destroy-method="destroy"

    class="cn.itcast.g_init_destroy.UserDaoImpl"/>


publicclass UserDaoImpl implements UserDao {

    publicvoid init() {

       System.out.println("UserDaoImpl初始化了");

    }

    publicvoid destroy() {

       System.out.println("UserDaoImpl销毁了");

    }

}

@Test

publicvoid test1() {

    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(

"applicationContext.xml", getClass());

    Object dao = ac.getBean("userDao");

    System.out.println(dao);

    ac.close(); // 一定要关闭才会执行destroy-method beanscope也不能是prototype

}

1,   如果scope属性为prototype则不受spring缓存的控制,destory方法也将不会执行(scope调为singleton时才会有效)。

2,    要调用ApplicationContextclose()方法才会执行destory方法(在ApplicationContext接口中没有close()方法,需要强转为具体的实现类才可以调用)


你可能感兴趣的:(Spring:bean的生命周期)