读书人

4 spring管理bean的作用域

发布时间: 2012-11-07 09:56:10 作者: rapoo

四 spring管理bean的作用域

四 spring管理bean的作用域先看配置<bean id="personservice" scope="prototype"></bean>输出就为false通过scope就可以让其bean实例为多实例的prototype在spring是什么意思prototype 每次从容器获取bean都是新的对象。现在我们可以进一步思考 这个实例是什么时候就被加载的呢 ?我们可以在实现类中写一个默认的构造方法 并且在构造方法中输出一句话 修改下 package cn.itcast.service.impl;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService {    public PersonServiceBean(){    System.out.println("我被实例化了");    }public void save(){System.out.println("我是save()方法");}}执行代码ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");输出:我被实例化了注意:在执行这代码之前必须让实现类交给spring管理的作用域范围为默认的,只有在单例(singleton)的情况下才会实例化bean,在scope="prototype"的情况下将不会在初始化spring中实例化bean 这时候只有在调用的情况下才会实例化这就说明了,这实例在初始化spring的时候就同时把实例也初始化了 可不可以让初始化在调用的时候加载实例呢?当然可以singleton默认情况下的单例模式,每次调用getBean方法获取的都是同一个bean对象默认情况喜爱会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init属性来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean。<bean id="xxx" lazy_init="true"/>如果对所有bean都应用延迟初始化<beans default-lazy-init="true"...>prototype每次从容器获取bean都是一个新的对象requestsessionglobal session在bean实例初始化的时候,我们还可以进行初始化方法的配置 在配置文件中的bean节点加入init-method即可 执行 ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");就可以看到输出了同时我们还可以在spring服务关闭的时候执行资源的释放在bean节点中加入destroy-method即可AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");ctx.close();实现类package cn.itcast.service.impl;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService {    public PersonServiceBean(){    System.out.println("我被实例化了");    }public void save(){System.out.println("我是save()方法");}public void init(){System.out.println("初始化方法进行中");}public void destroy(){System.out.println("销毁的方法进行中");}}配置文件<bean id="personservice" init-method="init" destroy-method="destroy"></bean>end 完毕!

?

读书人网 >编程

热点推荐