Spring 框架的初步搭建---使用maven--入门级别

Spring 的配置

第一步:

需要添加springjar,

Spring 框架的初步搭建---使用maven--入门级别 

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

 Spring 框架的初步搭建---使用maven--入门级别

添加junit测试的jar:

 Spring 框架的初步搭建---使用maven--入门级别

 

第二步:

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

 Spring 框架的初步搭建---使用maven--入门级别

 

 

第三步:

创建bean

 Spring 框架的初步搭建---使用maven--入门级别

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

 

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

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

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

对象进行配置.

 Spring 框架的初步搭建---使用maven--入门级别

 Spring 框架的初步搭建---使用maven--入门级别

 

 

在spring-configsbeans里面加上了default-lazy-init=”true”

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

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

 

第五步写测试类:

 Spring 框架的初步搭建---使用maven--入门级别

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

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

 Spring 框架的初步搭建---使用maven--入门级别

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

 

再看看是否有延迟加载:

测试方法:

 Spring 框架的初步搭建---使用maven--入门级别

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

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

 Spring 框架的初步搭建---使用maven--入门级别

看打印结果:

 Spring 框架的初步搭建---使用maven--入门级别

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

 

 

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

 Spring 框架的初步搭建---使用maven--入门级别

 Spring 框架的初步搭建---使用maven--入门级别

 

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

 

 

 

 

Bean对象的单例和多例模式

1. 单例模式:

 Spring 框架的初步搭建---使用maven--入门级别

测试:

 Spring 框架的初步搭建---使用maven--入门级别

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

 

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

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

 

2.多例模式:

 Spring 框架的初步搭建---使用maven--入门级别

测试:

 Spring 框架的初步搭建---使用maven--入门级别

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

 

 

Bean对象的生命周期:

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

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

 Spring 框架的初步搭建---使用maven--入门级别

 

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

Bean对象的配置:

 Spring 框架的初步搭建---使用maven--入门级别

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

 Spring 框架的初步搭建---使用maven--入门级别

 

测试类:

 Spring 框架的初步搭建---使用maven--入门级别

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

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

结果:

 Spring 框架的初步搭建---使用maven--入门级别

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

多例模式的情况下:

 Spring 框架的初步搭建---使用maven--入门级别

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

并没有调用destroy()方法.