- 对象的创建时机:
执行的步骤:1,3, 2
以上两种情况是默认值,当spring容器启动的时候创建对象
在bean里面的lazy-init属性:
Default 相当于false 在spring容器启动的时候,创建对象
True在context.getBean时创建对象
False在spring容器启动的时候创建对象
意义:如果把lazy-init设置为true,则spring容器再启动的时候检测不到任何错误,这样存在很大的安全隐患,所以一般设置成false或者default,但是如果一个bean中有一个属性,该属性含有大量的数据,这个时候不希望该bean过早的停留在内存中。
这个时候需要用到lazy-init为true。
对象的作用域:
默认情况下(scope=singleton):放入到spring中的bean是单例的,将来service层和dao层所有的类都将放入到spring容器中,所以默认情况下这两层的类的实例都是单例的,所以不能把数据声明到属性中。如果声明到属性中,就会成为共享的。
scope=prototype(每次调用创建新的bean对象)
创建时机和scope的结合:
scope=prototype和lazy-init=true:在context.getBean的时候创建对象
scope=prototype和lazy-init=false:在context.getBean的时候创建对象,lazy-init=false失效。当scope=prototype时,始终是context.getBean的时候创建对象
因为Scopse为prototype时,这个实例就变为多例的,lazy-init如果为false,一开始就创建该实例是没有意义的,所以这时候lazy-init默认为true;
scope=singleton:是默认情况
init和destroy的方法:
说明:
1、 init方法是由spring内部执行的
2、 只有当spring容器关闭以后才能执行destroy方法,spring容器一般情况下是不会关闭的。只有当web容器销毁掉的时候才可能关闭掉,所以只要一个对象在spring容器中,在spring容器关闭之前,会一直保留。
3、 如果一个bean的配置是scope为”prototype”,则spring容器不负责销毁。
spring容器所做的事情:
总结:
创建对象
1、对象的创建方式
2、对象的创建时机
3、对象的创建的模式
4、Init和destroy
5、创建时机和创建模式的结合
初始化和销毁