Spring是什么?
Spring是分层的JAVAEE应用一站式的轻量级开源框架,以控制器反转(IoC)和面向切面编程(AOP)为内核,提供了表现层SpringMVC、持久层SpringJDBC以及业务层事物管理等众多的企业级应用技术。
特点:
方便解耦,简化开发(核心):
通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。AOP编程的支持(核心):
通过Spring提供的AOP功能,用户可以方便进行面向切面编程,许多不容易用传统面向对象编程(OOP)实现的功能都可以通过AOP轻松应对。声明式事物的支持(核心):
通过Spring的声明式事物灵活地进行事物管理,提高开发效率和质量。方便的程序测试:
可以用非容器依赖的编程方式进行几乎所有的测试工作。方便集成各种优秀框架
降低JavaEEAPI的使用难度
Spring源码德海经典的学习范例
架构:
架构和工作原理:
IoC(控制反转):
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负者的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。控制权转移带来的好处就是降低了业务对象之间的依赖程度。
DI:IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点通过DI来实现的。
依赖注入是组装应用对象的一种方式:对象无需知道依赖来自何处或者依赖的实现方式。依赖对象通常只能通过接口了解所注入的对象,这样就能确保低耦合。
依赖注入的方式:
- 构造器注入
- 方法注入
- 接口注入
- 注意:Spring的IoC容器只支持构造器和方法注入
ApplicationContext:应用上下文
Spring有几种获取ApplicationContext应用上下文实例的方式:
- ClaaaPathXmlApplicationContext-从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源
- FileSystemXmlApplicationContext-读取文件系统下的XML配置文件并加载上下文定义
- XMLWebApplicationContext-读取Web应用下的XML配置文件并加载上下文定义
装配Bean:
- 所谓装配Bean就是指创建应用对象之间协作关系的行为,这是依赖注入的本质。
- Spring通过配置文件的方式定义Bean以及Bean与Bean之间的关系!
- Spring支持多种形式Bean配置方式:1)基于XML配置、2)注解的配置、3)Java类的配置
Bean的作用域:
在Spring容器中,所有的Bean默认都是单例。
内部Bean注入:
内部Bean的特点是不能被复用。每部Bean仅适用于一次注入,而且不能被其他Bean所引用。
SpEL表达式:
SpEL是一种强大、简介的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。
特性:
- 调用方法和访问对象的属性
- 使用Bean的id来引用Bean
- 对值进行算术、关系和逻辑运行
- 正则表达式匹配
简化Bean配置
1、自动装配:用于减少甚至消除配置< peoperty>元素和< construtor-arg>元素,让Spring自动识别任何装配Bean的依赖关系
2、自动检测:用于让Spring能够自动识别哪些类需要被装配成Bean,从而减少对< bean>元素的使用
AOP(面向切面过程):
概念:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP与OOP的区别:AOP和OOP在字面上虽然非常类似,但确实面向不同领域的两种设计思想。这两种设计思想在目标上有着本质的差异。
OOP(面向对象编程):针对业务处理过程的实体及其属性和行为进行抽象封装,以获取更加清晰高效的逻辑单元划分。
AOP(面向切面编程):针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或阶段,以获得逻辑过程中各部分之间的低耦合性的隔离效果。
总结:AOP绝对不会代替OOP,而是与OOP整合起来,一次之长,补彼之短。
一、横切关注点:在软件开发中,分布于应用中多处的功能被称为横切关注点。
AOP的主要功能:
- 日志记录、
- 性能统计、
- 安全控制、
- 事物处理、
- 异常处理、
- 其他功能
1、连接点(Joinpoint)(就是要插入代码的位置):程序执行的某个特点位置(如类开始初始化前、类初始化后。类某个方法调用前、调用后、方法跑吹异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特点的点就称为连接点。
注意:Spring仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强。
2、切点(Pointcut)(查找连接点的方式或条件):每个类一般都拥有多个连接点(一般一个方法就是一个连接点)。AOP需要定位到特定的连接点,而定位连接点的方式就是切点。连接点相当于数据库中的记录,而切点相当于查询条件,一个切点可以匹配多个连接点。
注意:Spring中切点同Pointcut接口定义,它使用类和方法作为连接点的查询条件。SpringAOP的规则解析引擎负者解析切点所设定的查询条件,找到对应的连接点。
3、增强(advice)(插入的代码):增强是织入目标类连接点上的一段程序代码。在Spring中,增强除用于描述一段程序代码外,还拥有另一个和连接点相关的信息-执行点的的方法。结合执行点的方法信息和切点信息,AOP就可以找到特点的连接点。
- BeforeAdvice:表示方法调用前的位置
- AfterReturnAdvice:表示方法调用返回后的位置
- ThrowsAdvice:表示抛出异常的位置
4、目标对象(Target):它是增强逻辑的织入目标类。通过AOP业务逻辑类只需要实现非横切逻辑的代码,而性能监视、事物管理等横切逻辑则可以使用AOP动态织入到特点的连接点上。
5、引介(Introduction):引介是一种特殊的增强,它为类添加一些属性和方法。即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
6、织入(Weaving):织入是将增强添加对目标类具体链接点上的过程。AOP有三种织入方式:
- 编译器织入:要求使用特殊Java编译器
- 类装置期织入:要求使用特殊的类装载器
- 动态代理织入:在运行期为目标列添加增强生成子类的方式
7、代理(Proxy):一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类即可能是原类具有相同接口的类,可可能就是原类的子类。所以,可以采用调用原类相同的方式调用代理类。
8、切面(Aspect):切面由切点和增强或引介组成。它即包括了横切逻辑的定义,可包括了连接点的定义。
注意:springAOP负者实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点。
SpringAOP:使用纯JAVA实现,它不需要专门的编译过程,也不需要特殊的类装载器,它在运行期通过代理的方式向目标类织入增强代码。SpringAOP使用了两种代理机制:JDK动态代理和CGLib动态代理,他们是SpringAOP底层技术。
增强类型:Spring使用增强接口定义横切逻辑,同时由于Spring只支持方法连接点,所以增强即包含横切逻辑,还包含部分连接点信息。
Spring增强类型如下:
前置增强:BeforeAdvice类代表前置增强,表示在目标方法执行前实施增强
后置增强:AfterReturningAdvice接口代表后置增强,表示在目标方法执行后实施增强
环绕增强:MethodInterceptor接口代理环绕增强,表示在目标方法执行前面实施增强
异常抛出增强:ThrowsAdvice接口代表抛出异常增强,表示在目标方法抛出异常后实施增强
###事物管理
###数据持久层