【Spring】配置文件

首先,什么是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属性来表示对象的作用范围,它有五个属性值:

扫描二维码关注公众号,回复: 13290550 查看本文章

接下来我们仅针对使用比较多的两个属性值进行测试:

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

执行测试方法:

哇哦,介绍了好多,大家掌握了多少呢?俗话说好记性不如烂笔头,实践出真知,多用就好啦!

猜你喜欢

转载自blog.csdn.net/hejingfang123/article/details/114103503