首先,什么是Spring的配置文件呢?上一篇【Spring】程序开发步骤https://mp.csdn.net/editor/html/113821302讲到的第三步创建spring核心配置文件,其实就是创建一个xml文件,第四步是配置Spring配置文件,接下来我们具体讲解一下Spring配置文件的配置:
说到Spring配置文件,那么一定离不开bean标签。
关于bean标签,上一篇文章只是简单地讲解了一下他的基本配置,比如作用,规则和组成,下面说点不一样的:
1、bean标签基本配置(以前说过的)
用于配置对象交由spring来创建
默认情况下它调用的是类中的无参构造函数创建的,如果没有无参构造函数则不能创建成功
xml文件bean标签组成及作用:
id作用:Bean实例在Spring容器中的唯一标识,不允许重复 ;
class:Bean的全限定名
2、bean标签范围配置
bean标签用scope属性来表示对象的作用范围,它有五个属性值:
接下来我们仅针对使用比较多的两个属性值进行测试:
i.将scope属性值设置为singleton
ii.我们先来创建一个测试包:
iii.测试需要借助于Junit单元测试,在pom文件中引入
iv.编写测试类
v.测试结果:
vi.将scope属性修改为prototype
vii.测试结果:
如何证明UserDaoImpl对象在容器中创建了呢?默认情况下,我们的配置代表找的是无参构造创建对象
将UserDaoImpl内部复写无参构造右键-->generate-->constructor
在控制台打印一次就说明方法调用一次,无参构造方法调用一次就说明创建一次
结论:
1)当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
* 对象创建:当应用加载,创建容器时,对象就被创建了
* 对象运行:只要容器在,对象一直活着
* 对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
* 对象创建:当使用对象时,创建新的对象实例
* 对象运行:只要对象在使用中,就一直活着
* 对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
3.bean生命周期的配置
* init-method:指定类中的初始化方法名称
* destroy-method:指定类中销毁方法名称
写完之后需要告诉spring有初始化和销毁方法,怎么做呢?通过配置文件的int-method和destory-method方法
执行测试方法:
先通过无参构造创建,再调用方法
咦?怎么没有销毁方法呢?
我们现在执行的是单元测试,单元测试只要执行完毕,就会销毁了,但是为什么没有打印出来校销毁的呢?因为还没有来的及打印,方法就执行完毕了
测试:让容器手动关闭,调用close方法
效果:
4.bean实例化三种方式
* 无参构造方法实例化
* 工厂静态方法实例化
*工厂实例方法实例化
i.无参构造方法实例化:
不写,直接默认调用无参的构造方法;或者我们右键-->generate-->constructor生成一个无参的构造方法
工厂静态方法实例化:
ii.创建静态工厂
静态工厂可以直接调方法,不用实例化(静态方法,如果在调用的时候,不用实例化对象,直接调就可以;但是非静态方法,在调用之前需要先实例化才可以)
在配置文件中修改:
spring在解析的时候发现有factory—method,他就不会再找StaticFactory的无参构造了,他会找StaticFactory内部指定方法,也就是getUserDao。
执行测试方法:
iii.工厂实例方法实例化
步骤:
必须现有工厂对象,才能调方法,因此在配置文件中,先让spring容器产生工厂对象,然后再调方法;
然后通过无参对象创建工厂,调用工厂的getUserDao方法创建bean
执行测试方法:
哇哦,介绍了好多,大家掌握了多少呢?俗话说好记性不如烂笔头,实践出真知,多用就好啦!