Spring 框架
1、 Spring 体系结构组成
Date Access/Integration 数据访问/集成
JDBC 模块提供了删除冗余的 JDBC 相关编码的 JDBC 抽象层。
ORM 模块为流行的对象关系映射 API, 包括 JPA, JDO, Hibernate 和 iBatis, 提供了集成层。
OXM 模块提供了抽象层, 它支持对 JAXB, Castor, XMLBeans, JiBX 和 XStream 的对象/XML
映射实现。
Java 消息服务 JMS 模块包含生产和消费的信息的功能。
事务模块 Transactions 为实现特殊接口的类及所有的 POJO 支持编程式和声明式事务管理。
Web(MVC/Remoting 远程处理)
Web 模块提供了基本的面向 web 的集成功能, 例如多个文件上传的功能和使用 servlet 监听
器和面向 web 应用程序的上下文来初始化 IoC 容器。
Web-MVC 模块包含 Spring 的模型-视图-控制器(MVC), 实现了 web 应用程序。
Web-Socket 模块为 WebSocket-based 提供了支持, 而且在 web 应用程序中提供了客户端和
服务器端之间通信的两种方式。
Web-Portlet 模块提供了在 portlet 环境中实现 MVC,并且反映了 Web-Servlet 模块的功能。
AOP 模块提供了面向切面的变成实现, 允许你定义方法拦截器和切入点对代码进行干净地解
耦, 它实现了应该分离的功能。
Aspects 模块提供了与 AspectJ 的集成, 这是一个功能强大且成熟的面向切面编程(AOP)
框架。
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器
的实现。
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。 它也支持
一个注解编程模型, 它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
Core Container 核心容器
Beans 模块提供 BeanFactory, 它是一个工厂模式的复杂实现。
Core 模块提供了框架的基本组成部分, 包括 IoC 和依赖注入功能。
Context 上下文模块建立在由 Core 和 Beans 模块提供的坚实基础上, 它是访问定义和配置
任何对象的媒介。 ApplicationContext 接口是 Context 模块的重点。
SpEL 表达式语言模块在运行时提供了查询和操作一个对象图的强大的表达式语言。
Test 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
2、 Spring 的理解
首先, spring 是一个开源框架, Spring 为简化企业级应用开发而生, 使用 Spring 可以使简
单的 JavaBean 实现以前只有 EJB 才能实现的功能。 Spring 是一个 IOC 和 AOP 容器框架。
Spring 主要核心是:
(1)控制反转(IOC): 传统的 java 开发模式中, 当需要一个对象时, 我们会自己使用 new 或
者 getInstance 等直接或者间接调用构造方法创建一个对象, 而在 Spring 开发模式中,
Spring 容器使用了工厂模式为我们创建了所需要的对象, 我们使用时不需要自己去创建,
直接调用 Spring 为我们提供的对象即可, 这就是控制反转的思想。 实例化一个 java 对象有
三种方式: 使用类构造器, 使用静态工厂方法, 使用实例工厂方法, 当使用 spring 时我们
就不需要关心通过何种方式实例化一个对象, spring 通过控制反转机制自动为我们实例化
一个对象。
(2)依赖注入(DI): Spring 使用 Java Bean 对象的 Set 方法或者带参数的构造方法为我们在
创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。
(3)面向切面编程(AOP): 在面向对象编程(OOP)思想中, 我们将事物纵向抽象成一个个的对
象。 而在面向切面编程中, 我们将一个个对象某些类似的方面横向抽象成一个切面, 对这个
切面进行一些如权限验证, 事物管理, 记录日志等公用操作处理的过程就是面向切面编程的
思想。
在 Spring 中, 所有管理的对象都是 JavaBean 对象, 而 BeanFactory 和 ApplicationContext
就是 spring 框架的两个 IOC 容器, 现在一般使用 ApplicationContext, 其不但包含了
BeanFactory 的作用, 同时还进行更多的扩展 。3、 Spring Bean 生命周期
1.Spring 容器 从 XML 文件中读取 Bean 的定义, 并实例化 Bean。
2.Spring 根据 Bean 的定义填充所有的属性。
3.如果 Bean 实现了 BeanNameAware 接口, Spring 传递 bean 的 ID 到 setBeanName 方法。
4. 如 果 Bean 实 现 了 BeanFactoryAware 接 口 , Spring 传 递 beanfactory 给
setBeanFactory 方法。
5. 如 果 有 任 何 与 bean 相 关 联 的 BeanPostProcessors , Spring 会 在
postProcesserBeforeInitialization()方法内调用它们。
6.如果 bean 实现 IntializingBean 了, 调用它的 afterPropertySet 方法, 如果 bean 声明
了初始化方法, 调用此初始化方法。
7. 如 果 有 BeanPostProcessors 和 bean 关 联 , 这 些 bean 的
postProcessAfterInitialization() 方法将被调用。
8.如果 bean 实现了 DisposableBean, 它将调用 destroy()方法。
注意:
有两个重要的 bean 生命周期方法, 第一个是 setup() , 它是在容器加载 bean 的时候被调
用。 第二个方法是 teardown() 它是在容器卸载类的时候被调用
The bean 标签有两个重要的属性 init-method 和 destroy-method。 使用它们你可以自己定
制初始化和注销方法。 它们也有相应的注解@PostConstruct 和@PreDestroy。
4、 Spring 中的设计模式
1.代理模式—Spring 中两种代理方式, 若目标对象实现了若干接口, spring 使用 JDK 的
java.lang.reflect.Proxy 类代理, 若目标对象没有实现任何接口, spring 使用 CGLIB 库生
成目标对象的子类。
2.单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。
3.模板方法模式—用来解决代码重复的问题。
比如: RestTemplate, JmsTemplate, JpaTemplate。
4.前端控制器模式—Srping 提供了 DispatcherServlet 来对请求进行分发。
5.视图帮助(View Helper )—Spring 提供了一系列的 JSP 标签, 高效宏来辅助将分散的代码
整合在视图里。
6.依赖注入—贯穿于 BeanFactory/ApplicationContext 接口的核心理念。
7.工厂模式—在工厂模式中, 我们在创建对象时不会对客户端暴露创建逻辑, 并且是通过使
用一个共同的接口来指向新创建的对象。 Spring 中使用 BeanFactory 用来创建对象的实例。
|
|