1. Spring简介
Spring是一个轻量级的java开源框架,它是为了解决企业应用开发的复杂性而创建。它使用基本的JavaBean来完成以前只可能由EJB完成的事情。但Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合等方面从Spring中获益。
1.1 Spring的7大模块
Spring组成模块1.2 Spring框架中用到了哪些设计模式
工厂模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean。
代理模式 :Spring AOP 功能的实现。
单例模式 :Spring中的Bean默认是单例。
装饰者模式 :根据客户的需求能够动态切换不同的数据源。
观察者模式:Spring 事件驱动模型。
适配器模式 :Spring MVC 中也是用到了适配器模式适配Controller。
2. Spring两大特性
2.1 Ioc(控制反转)
IoC是一种原则,不是设计模式。引入IoC的目的是:降低类之间的耦合;倡导面向接口编程、实施依赖倒置原则;提高系统可插入、可测试、可修改等特性。
2.1.1 IoC容器的初始化
第一步:定位Resources。
第二步:将Resources载入到BeanDefinition。
第三步:将BeanDefinition注册到容器中。
之后客户端如果要获取Bean,Spring容器会根据注册的BeanDefinition信息进行实例化。
2.1.2 容器类型
Spring提供了两种不同类型的IoC容器:
BeanFactory是最简单的容器,给 DI 提供了基本的支持。在Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是XmlBeanFactory 类。
ApplicationContext容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。最常被使用的 ApplicationContext 接口实现FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、WebXmlApplicationContext
2.1.3 Bean生命周期
Bean生命周期1. instantiate bean对象实例化
2. populate properties 封装属性
3. 如果Bean实现BeanNameAware执行setBeanName
4. 如果Bean实现BeanFactoryAware或ApplicationContextAware设置工厂setBeanFactory或上下文对象setApplicationContext
5. 如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessBeforeInitialization
6. 如果Bean实现InitializingBean执行afterPropertiesSet
7. 调用自定义的init-method方法
8. 如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitialization
9. 如果Bean实现DisposableBean执行destroy
10. 调用自定义的destroy-method
2.2.4 Bean的作用域
singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
2.2.5 依赖注入
IoC容器通过依赖注入的方式来管理Bean之间的依赖关系。依赖注入有三种方式:构造方法注入、set方法参数注入、接口注入。
基于@Autowired的自动装配,默认根据类型注入,可以用于构造器、接口、方法注入。
基于@Resource的自动装配,默认根据名称注入,可以用于字段或属性的set方法上。
2.3 AOP(面向切面编程)
2.3.1 什么是AOP
AOP(Aspect Oriented Programming),即面向切面编程。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,它们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务。
2.3.2 AOP的术语
横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称为横切关注点。
切面(aspect):对横切关注点的抽象。
连接点(joinpoint):被拦截到的点,Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或构造器。
切入点(poincut):对连接点进行拦截的定义。
通知(advice):指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕五类。
目标对象:代理的目标对象。
织入(weave):将切面应用到目标对象并导致代理对象创建的过程。
引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态添加一些方法或字段。
2.3.3 Spring对AOP的支持
Spring中AOP代理由Spring的IOC容器负责生成、管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:默认使用Java动态代理来创建AOP代理,这样可以为任何接口实例创建代理。当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理。
3. Spring的事务传播行为
事务传播行为4. Spring MVC
4.1 工作流程
Spring MVC工作流程1. 用户发送请求到前端控制器DispatherServlet
2. DispatherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler
3. 处理器映射器根据请求的url找到具体的处理器,生成处理器对象返回给DispatherServlet
4. DispatherServlet通过HandleAdapter处理器适配器调用处理器
5. Handler执行完返回ModelAndView
6. HandlerAdapter将ModelAndView返回给DispatherServlet
7. DispatherServlet将ModelAndView传给ViewReslover视图解析器进行解析
8. ViewResolver解析后返回具体的View
9. DispatherServlet对View进行渲染视图
10. DispatherServlet响应用户
4.2 全球异常处理
使用 @ControllerAdvice + @ExceptionHandler 注解
异常处理
网友评论