spring:
为什么要使用SRPING?
1、简化企业级程序的开发(提供大量企业级服务的再次封装)
2、框架容易集成其它子框架
3、提供IOC/AOP容器,可以将业务对象组装到一起,并提供灵活的中间件服务
4、轻量(大小合适,并且是非侵入式方案)
开发环境:
jar: spring.jar,jakarta-commons/*.jar
第一个程序:
IOC:
控制反转?
对象必须协作才能完成某种业务
以前:对象自己寻找协作对象
现在:协作对象由外部实体提供。
组件之间的依赖关系,由容器在运行期决定,也就是说,由容器动态地将某种依赖关系注入到组件中。
IOC又叫依赖注入
装配:
容器根据配置文件将协作对象实例化,建立这些对象之间的关系。
容器:(PPT39)
org.springframework.beans.factory.BeanFactory
Bean工厂
提供最基本的Bean的生命周期管理和装配。
直到调用getBean方法时,才真正实例化Bean。
getBean(Bean's id)
org.springframework.beans.factory.xml.XmlBeanFactory
它可以依据Resource找到相应的配置文件
Resource rs = new ClassPathResource(配置文件的相对路径)
BeanFactory factory = new XmlBeanFactory(rs);
org.springframework.context.ApplicationContext
应用上下文
应用上下文提供更多的功能,包括资源获取、国际化,事件处理等等。
对于有单例要求的实例,在加载的时候就已经实例化。
org.springframework.context.support.ClassPathXmlApplicationContext
ApplicationContext实现,它可以依据Classpath查找配置文件
ApplicationContext ctx
= new ClassPathXmlApplicationContext(配置文件的相对路径)
其它实现:XmlWebApplicationContext,FileSystemXmlApplicationContext
作用,使用方式,区别
组件:
组件的生命周期(见图)
基本装配:
IOC的实现方式:
(1)基于接口 type1:要求组件实现容器提供的特定的接口,这种方案
属于浸入式方案,耦合性大,现在不再使用。
(2)基于set方法 type2
(3)基于构造器 type3
set方式:
基本类型:8种基本类型+String
<property><value>值</...>
对于基本类型,也可有简写形式
Object:
<property><ref bean="bean的id"/></...>
<property><ref local="bean的id"/></...>
local要求两个Bean在同一个配置文件里
<property><bean id.....></..>
该Bean只能被当前Bean使用
集合:(P24)
list,set,map,properties
也支持泛型
null:
<property><null/>
构造器方式:
比较set与构造器方式:
构造器方式优点:
可以保证所有要使用的属性一定初始化了。
自动装配:(PPT34)
让容器依据某种规则,自动地对组件实施装配
autowire=""
byName:匹配属性名与bean的名字
byType:寻找配置文件,匹配属性的类型与bean 的类型,成功就设置
如果匹配的个数超过一个,报错。
constructor:匹配构造器,看构造器的参数类型与bean的类型是否一致,
成功就设置,如果匹配的个数超过一个,报错。
autodetect:先按照constructor,然后byType
示例:
检查装配情况:
dependency-check=""
simple:检查基本类型属性是否装配成功
object:检查Object类型装配是否成功
all:全检查
dependency-check与autowire配合使用。
尽量少用autowire,在原型开发的时候用于快速开发。
装配中的其它情况:
单例:
scope=""
singleton,prototype
初始化与销毁
init-method,destroy-method
在非WEB应用中,对于Singleton的Bean所设置的destroy方法,可执行
AbstractApplicationContext.registerShutdownHook()。
Bean定义的继承:
继承抽象:abstract="true",parent=""
也可直接继承
工厂方式创建实例:(ppt30)
静态工厂
factory-method=""
工厂
factory-bean=""
factory-method=""