Spring 集成框架
由7个模块组件构成,构建在核心容器上:
Spring AOP Spring ORM Spring Web Spring WebMVC Spring DAO Spring Context
Spring Core
其分层架构特点允许选择使用一个或多个组件
Spring Core:组件BeanFactory工厂模式的实现,通过控制反转机制,将应用程序配置与程序代码分开
Spring Context:提供上下文信息
Spring AOP:提供事务管理服务
Spring DAO:提供异常层次结构,管理异常处理和错误信息
Spring ORM:提供ORM对象关系工具,包括Hibernate、iBatis、遵从Spring通用事务和异常层次结构
Spring Web:基于Web提供Context上下文,处理多份请求和绑定域对象
Spring Web MVC:全功能构建Web应用程序的MVC实现。
Sping理念:不取代已有的框架,而与它们无缝地整合,旨在提供一个集成的容器(框架)。
Spring核心机制——依赖注入(Dependency Inversion),也称为控制反转,指在运行过程中,如果需要
调用另一个对象协助时,不需要创建被调用者的实例而是依赖于外部的注入。
依赖注入有两种方式:设置注入(setter方法)、构造注入(构造器注入)
设置注入:
<!-- Human接口类,Chinese实现类 -->
<bean id="chinese" class="com.Chinses">
<!-- lan为Chinses的Languge对象属性 -->
<property name="lan" ref="english"></property>
</bean>
<!-- Language接口类,English实现类 -->
<bean id="english" class="com.English">
调用:
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/applicationContext.xml");
Human human=(Human)ctx.getBean("chinese");
构造注入:
public Chinese(Language lan){
this.lan=lan;
}
<bean id="chinese" class="com.Chinses">
<constructor-arg ref="english"></constructor-arg>
</bean>
<bean id="english" class="com.English">
依赖注入先是创建一个默认的Bean实例,然后调用对应的set方法注入依赖关系,而构造注入则在构造
Bean实例时就完成了依赖关系的注入
Spring核心接口:BeanFactory(Bean工厂)、ApplicationContext(应用上下文,是BeanFactory的子接口)
两者都是载入Bean定义信息,装配Bean,分发Bean。
BeanFactory:工厂设计模式,负责创建分发各种类型的Bean。其常用实现类XmlBeanFactory,须传递
一个java.io.InoutStream对象给构造函数,由InputStream对象提供Xml文件给工厂
BeanFactory factory=new XmlBeanFactory(new FileSystemStream("applicationContext.xml"));
但调用getBean()方法时,工厂实例化Bean,依赖注入设置属性值
ApplicationContext提供了很多BeanFactory没有的子功能:
1、提供国际化功能
2、提供载入文本资源通用方法,如图片
3、可以向注册为监听器的Bean发送事件
ApplicationContext常用三个实现类:
1、ClassPathXmlApplicationContext:从类路径中载入XML文件定义信息
2、FileSystemXmlApplicationContext:从文件系统的XML中载入
3、XmlWebApplicationContext:从Web系统中的XML载入
ApplicationContext context=new ClassPathXmlApplicationContext("foo.xml");
ApplicationContext context=new FileSystemXmlApplicationContext("c:/foo.xml");
ApplicationContext context=new WebApplicationContextUtils.getWebApplicationContext(
request.getSession().getServletContext());
BeanFactory会延迟载入所有的Bean,直到getBean()被调用
而ApplicationContext则会预载所有的单实例Bean,应用程序不需要等待
Bean装配:容器根据依赖注入将Bean配合起来
<bean id="foo" class="com.spring.Foo">通过id值来获取Bean
指定Bean作用域:
单实例模式:分配Bean时,总是返回同一个Bean实例
原型模式:请求一个Bean时,得到一个不同的实例 //<bean id="" class="" singleton="false">
request/session:每次Http请求或HttpSession请求将会产生不同的Bean实例,只有在Web应用中有效
global session:每个全局的HttpSession对应一个Bean实例
Spring AOP 略