Spring 的配置

第一步:

需要添加spring的jar包,

maven spring mvc 版本_maven spring mvc 版本

 

只需要添加spring-context.jar就行.因为其他的jar包都会依赖过来;

 

maven spring mvc 版本_spring_02

添加junit测试的jar包:

 

maven spring mvc 版本_spring_03

 

第二步:

编写核心配置文件spring-configs.xml;这个名字可以随便写;

 

maven spring mvc 版本_spring_04

 

 

第三步:

创建bean类

 

maven spring mvc 版本_配置文件_05

第四步:配置spring-configs.xml将这个HessloService添加到spring的bean容器中.

 

在软件应用中由Spring管理的所有对象都称之为Bean.我们自己创建的类

假如需要由spring管理,首先对这个类进行配置,常用配置方式有两种,一种

基于xml进行配置,一种基于注解进行配置.本小节主要是基于xml对bean

对象进行配置.

 

maven spring mvc 版本_maven spring mvc 版本_06

 

maven spring mvc 版本_maven_07

 

 

在spring-configs的beans里面加上了default-lazy-init=”true”

就说明了启用了spring的延迟加载,延迟加载,不会在spring加载配置文件的时候就创建对象,

而只会,在调用getBean()方法的时候,才开始创建对象

 

第五步写测试类:

 

maven spring mvc 版本_spring 环境搭建_08

从ClassPathXmlApplicationContext:里面拿对象的时候有两种方法,

不把类对象传进去,那么就需要强转,传了类对象就不需要进行强转.

 

maven spring mvc 版本_配置文件_09

运行的结果是说明对象创建成功,并且成功调用了对象的sayHello()方法.

 

再看看是否有延迟加载:

测试方法:

 

maven spring mvc 版本_spring_10

打印结果为空,就说明没有走对象的构造方法,并没有创建对象,因为配置了延迟加载,只会在getBean()开始的时候去创建对象;

接下来把这个bean对象的延迟加载关闭;

 

maven spring mvc 版本_maven spring mvc 版本_11

看打印结果:

 

maven spring mvc 版本_配置文件_12

测试方法里面为空,但是只要一运行,那么spring就会去加载配置文件,而这个bean对象把延迟加载关闭了,就说明,spring只要一加载配置文件,就会,创建对象.

 

 

注意点:spring 会为配置的bean创建对象,底层是用反射,但是这个类必须提供无参的构造方法,如果没有无参的构造方法,是会出错了.(默认情况下是无参构造方法)

 

maven spring mvc 版本_maven spring mvc 版本_13

 

maven spring mvc 版本_配置文件_14

 

即使你配置了延迟加载,没有去getBean()拿到对象,只是做了spring的初始化操作,也会报错,可能的原因是spring底层会做检查操作,检查对应的类必须要有无参构造方法.

 

 

 

 

Bean对象的单例和多例模式

1. 单例模式:

 

maven spring mvc 版本_maven spring mvc 版本_15

测试:

 

maven spring mvc 版本_maven spring mvc 版本_16

由于配置的是单例模式,那么只会创建一个对象,全局都是用这么一个对象

 

1) 单例设计的优势是什么?(资源使用较少和性能较高)

2) 单例可能存在什么问题?(并发访问时的线程安全问题,一定存在吗?)

 

2.多例模式:

 

maven spring mvc 版本_spring_17

测试:

 

maven spring mvc 版本_配置文件_18

创建了三个实例对象.因为配置的是多例的方式,那么每一次去容器中取对象的时候,都是让容器重新去创建对象

 

 

Bean对象的生命周期:

在Spring框架应用中,所有的的Bean对象都有生命周期,所谓Bean对象的生命周期是指Bean对象的创建,初始化,服务,销毁的这个过程.

在spring配置文件中可以通过Init-method,destory-method属性指定bean的生命周期方法.例如:

 

maven spring mvc 版本_spring_19

 

测试单例模式的bean对象的生命周期:

Bean对象的配置:

 

maven spring mvc 版本_maven_20

在类里面写对应的init()和destroy()方法:

 

maven spring mvc 版本_maven_21

 

测试类:

 

maven spring mvc 版本_maven_22

有一点要注意,ApplicationContex这个接口没有close方法,所以需要使用子类ClassPathXmlApplicationContext的close()方法;

当测试程序走完之后,再走After注解标识的方法,把容器关闭

结果:

 

maven spring mvc 版本_配置文件_23

1) singleton作用域的对象可以在容器关闭时销毁(会调用对象的销毁资源的方法)

多例模式的情况下:

 

maven spring mvc 版本_spring 环境搭建_24

prototype作用域的对象可以由容器创建对象,初始化对象,但不负责销毁

并没有调用destroy()方法.