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
相关推荐
白净垃圾桶 2020-07-04
HappyHeng 2020-06-25
与卿画眉共浮生 2020-10-14
tangxiong0 2020-09-03
YangHuiLiang 2020-08-06
smalllove 2020-07-27
MicroBoy 2020-07-04
爱莲说 2020-06-26
itjavashuai 2020-06-25
与卿画眉共浮生 2020-11-13
smalllove 2020-11-03
hellowordmonkey 2020-11-02
丽丽 2020-10-30
周太郎 2020-10-28
greensomnuss 2020-10-27
职业炮灰 2020-10-16
feinifi 2020-10-14
feinifi 2020-10-13