Spring 框架的初步搭建---使用maven--入门级别
Spring 的配置
第一步:
需要添加spring的jar包,
只需要添加spring-context.jar就行.因为其他的jar包都会依赖过来;
添加junit测试的jar包:
第二步:
编写核心配置文件spring-configs.xml;这个名字可以随便写;
第三步:
创建bean类
第四步:配置spring-configs.xml将这个HessloService添加到spring的bean容器中.
在软件应用中由Spring管理的所有对象都称之为Bean.我们自己创建的类
假如需要由spring管理,首先对这个类进行配置,常用配置方式有两种,一种
基于xml进行配置,一种基于注解进行配置.本小节主要是基于xml对bean
对象进行配置.
在spring-configs的beans里面加上了default-lazy-init=”true”
就说明了启用了spring的延迟加载,延迟加载,不会在spring加载配置文件的时候就创建对象,
而只会,在调用getBean()方法的时候,才开始创建对象
第五步写测试类:
从ClassPathXmlApplicationContext:里面拿对象的时候有两种方法,
不把类对象传进去,那么就需要强转,传了类对象就不需要进行强转.
运行的结果是说明对象创建成功,并且成功调用了对象的sayHello()方法.
再看看是否有延迟加载:
测试方法:
打印结果为空,就说明没有走对象的构造方法,并没有创建对象,因为配置了延迟加载,只会在getBean()开始的时候去创建对象;
接下来把这个bean对象的延迟加载关闭;
看打印结果:
测试方法里面为空,但是只要一运行,那么spring就会去加载配置文件,而这个bean对象把延迟加载关闭了,就说明,spring只要一加载配置文件,就会,创建对象.
注意点:spring 会为配置的bean创建对象,底层是用反射,但是这个类必须提供无参的构造方法,如果没有无参的构造方法,是会出错了.(默认情况下是无参构造方法)
即使你配置了延迟加载,没有去getBean()拿到对象,只是做了spring的初始化操作,也会报错,可能的原因是spring底层会做检查操作,检查对应的类必须要有无参构造方法.
Bean对象的单例和多例模式
1. 单例模式:
测试:
由于配置的是单例模式,那么只会创建一个对象,全局都是用这么一个对象
1) 单例设计的优势是什么?(资源使用较少和性能较高)
2) 单例可能存在什么问题?(并发访问时的线程安全问题,一定存在吗?)
2.多例模式:
测试:
创建了三个实例对象.因为配置的是多例的方式,那么每一次去容器中取对象的时候,都是让容器重新去创建对象
Bean对象的生命周期:
在Spring框架应用中,所有的的Bean对象都有生命周期,所谓Bean对象的生命周期是指Bean对象的创建,初始化,服务,销毁的这个过程.
在spring配置文件中可以通过Init-method,destory-method属性指定bean的生命周期方法.例如:
测试单例模式的bean对象的生命周期:
Bean对象的配置:
在类里面写对应的init()和destroy()方法:
测试类:
有一点要注意,ApplicationContex这个接口没有close方法,所以需要使用子类ClassPathXmlApplicationContext的close()方法;
当测试程序走完之后,再走After注解标识的方法,把容器关闭
结果:
1) singleton作用域的对象可以在容器关闭时销毁(会调用对象的销毁资源的方法)
多例模式的情况下:
prototype作用域的对象可以由容器创建对象,初始化对象,但不负责销毁
并没有调用destroy()方法.