Spring17_配置文件详解3

一、Bean标签基本配置

 用于配置对象交由Spring来创建。

 默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

 基本属性:

  id:Bean实例在Spring容器中的唯一标识

  class:Bean的全限定名称

二、Bean标签范围配置

 scope:指对象的作用范围,取值如下:

 

 1. 当scope的取值为singleton时

  Bean的实例化个数:1个

  Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

  Bean的生命周期:

    a. 对象创建:当应用加载,创建容器时,对象就被创建了

    b. 对象运行:只要容器在,对象一直活着

    c. 对象销毁:当应用卸载,销毁容器时,对象就被销毁了

  代码实现1:

   

   

   执行test1,观察控制台输出,说明Spring容器中只有一个userDao bean。

   

  代码实现2:当scope的取值为singleton时,bean对象何时被实例化?

   applicationContext.xml配置文件设置scope="singleton",编辑UserDaoImpl新加无参构造函数

   

   SpringTest加断点,debug执行,F8逐步执行,可以看到第一条语句执行完就调用了无参构造函数,表示当加载核心配置文件创建Spring容器时,bean就创建了    

   

 2. 当scope的取值为prototype时

  Bean的实例化个数:多个 

  Bean的实例化时机:当调用getBean()方法时实例化Bean

  Bean的生命周期:

    a. 对象创建:当使用对象时,创建新的对象实例

    b. 对象运行:只要对象在使用中,就一直活着

    c. 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了

  代码实现1:

   

   执行test1,观察控制台输出,表示Spring容器中userDao不是同一个,是多个对象。

   

  代码实现2:当scope的取值为prototype时,bean对象何时被实例化?

   applicationContext.xml配置文件设置scope="prototype",编辑UserDaoImpl新加无参构造函数

    

   SpringTest加断点,debug执行,F8逐步执行,可以看到第一条语句执行完控制台无任何信息,表示没有创建bean对象

   

   F8继续执行,可以发现控制台输出了,表示当调用getBean()方法时创建了Bean对象,继续F8执行,又创建了一个bean对象

   

三、Bean生命周期配置

 1. init-method:指定类中的初始化方法名称

 2. destroy-method:指定类中销毁方法名称  

 代码实现:

    

  

  

   执行test1,检查输出,可以看到先创建对象,对象再调用方法。

  

  如果不加app.close()方法看不到destroy方法中的输出,因为执行的是单元测试,并不在tomcat容器中,单元测试执行完就应该销毁,没有打印销毁方法,是没来不及打印。所以加了app.close()手动关闭容器。

 四、Bean实例化三种方式

 无参构造方法实例化(重点);工厂静态方法实例化;工厂实例方法实例化

 1. 使用无参构造方法实例化

   它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败。

   

 2. 工厂静态方法实例化

  工厂的静态方法返回Bean实例

  

  

  

  执行test1,检查控制台输出:

  

 3. 工厂实例方法实例化

  工厂的非晶态方法返回Bean实例

  

  

  执行test1方法,检查控制台输出: 

  

 

posted on 2023-04-26 19:19  花溪月影  阅读(22)  评论(0编辑  收藏  举报