1. 对象的创建时机:

Play Framework和spring framework的区别 spring和fall_spring


 

执行的步骤:1,3, 2 

  

Play Framework和spring framework的区别 spring和fall_基础_02

以上两种情况是默认值,当spring容器启动的时候创建对象

 

Play Framework和spring framework的区别 spring和fall_spring对象的创建_03

在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对象)


Play Framework和spring framework的区别 spring和fall_spring对象的创建_04


Play Framework和spring framework的区别 spring和fall_创建对象_05

创建时机和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的方法:

Play Framework和spring framework的区别 spring和fall_spring_06

说明:

1、  init方法是由spring内部执行的

2、  只有当spring容器关闭以后才能执行destroy方法,spring容器一般情况下是不会关闭的。只有当web容器销毁掉的时候才可能关闭掉,所以只要一个对象在spring容器中,在spring容器关闭之前,会一直保留。

        3、  如果一个bean的配置是scope为”prototype”,则spring容器不负责销毁。    

   spring容器所做的事情:

Play Framework和spring framework的区别 spring和fall_数据_07

总结:

   创建对象

1、对象的创建方式

2、对象的创建时机

3、对象的创建的模式

4、Init和destroy

5、创建时机和创建模式的结合

   初始化和销毁