Spring总结

Spring Framework

Spirng Framework 特有功能

轻量级 - Spring 在代码量和透明度方面都很轻便。

IOC - 依赖注入(setter和构造函数),控制反转。

IOC容器 - Spring 负责创建和管理对象(Bean)的生命周期和配置。

AOP - 面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。

MVC - 对 web 应用提供了高度可配置性,其他框架的集成也十分方便。

事务管理 - 提供了用于事务管理的通用抽象层。Spring 的事务支持也可用于容器较少的环境。

JDBC 异常 - Spring 的 JDBC 抽象层提供了一个异常层次结构,简化了错误处理策略。

Spring 常用组件

Core:只要提供Ioc依赖注入

Aspects:与Aspectj集成提供支持

AOP:面向切面编程的实现

JDBC:java数据库连接

JMS:java消息服务

ORM:持久化工具

web:为web应用提供支持

text:为单元测试提供支持

Spring Bean

Spring bean 支持 5 种 scope:

    Singleton - 每个 Spring IoC 容器仅有一个单实例。

    Prototype - 每次请求都会产生一个新的实例。

    Request - 每一次 HTTP 请求都会产生一个新的实例,并且该 bean 仅在当前 HTTP 请求内有效。

    Session - 每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。

    Global-session - 仅在基于 portlet 的 web 应用中才有意义。

Spring Bean 容器的生命周期

spring bean 容器的生命周期流程如下:

	1. 实例化 - Spring 容器根据配置中的 bean 定义实例化 bean

	2. 属性注入 - Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置

	3. setBeanName() - 如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()

	4. setBeanFactory() - 如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()

	5. 依赖bean注入前 - 如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法

	6. 自定义初始化调用 - 如果为 bean 指定了 init 方法(init-method),那么将调用它。

	7. 依赖bean注入后 - 最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法

	8. 自定义销毁调用 - 如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()

	9. 自定义销毁调用 - 如果为 bean 指定了 destroy 方法(destroy-method),那么将调用它

Spring IOC 容器(底层是Map,解耦,即时与延迟加载)

将程序原本手动创建对象的控制权交给Spring容器管理。

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。

原理:工厂模式加反射机制。

两种IOC容器:

	BeanFactory - BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端要求时实例化 bean。

	ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。

Ioc初始化过程:
	XML -读取> Resource -解析> BeanDefinition -注册> BeanFactory

AOP(面向切面编程)

将业务无关却共同调用的逻辑(日志管理,权限控制)封装起来,减少重复代码,降低耦合,提高可扩展性和可维护性。

Spring AOP 基于动态代理方式实现(反射机制):JDK代理(代理对象需要实现接口)
AspectJ 基于静态代理方式实现(字节码操作):CGLib代理(生成代理对象的子类)

Spring MVC(模型-视图-控制器)

1. 向服务器发送HTTP请求,请求被DispatcherServlet(前端控制器)捕获。

2. DispatcherServlet调用HandlerMapping(处理器映射器)获得该Handler配置的所有相关的对象(包括Handler以及Handler对应的拦截器),最后以HandlerExecutionChain(执行链)的形式返回。

3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)。

4. HandlerAdapter去执行Hander。提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

    HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。

    数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。

    数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。

    数据验证:验证数据的有效性(长度、格式等),验证结果存储到`BindingResult`或`Error`中。


5. 返回ModelAndView。Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

6. 选择并返回 ViewResolver。根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。

7. 渲染视图。ViewResolver 结合Model和View,来渲染视图。

8. 返回视图到客户端。视图负责将渲染结果返回给客户端。

Spring用到的设计模式

工厂模式:IOC(BeanFactory,ApplicationContext)

代理模式:AOP

单例模式:Spring Bean

模板方法模式:Template

相关推荐