AOP介绍
1 | markdown复制代码aop:Aspect Oriented Programming,面向切面编程。是通过预编译方式(aspectj)或者**运行期动态代理**(Spring)实现程序功能的统一维护的技术。 |
aop的作用:在不修改源码的情况下,进行功能增强,通过动态代理实现的
1
复制代码 优势:减少重复代码,提高开发效率,方便维护
aop的底层实现:底层是通过动态代理实现的。在运行期间,通过代理技术动态生成代理对象,代理对象方法执行时进行功能的增强介入,再去调用目标的方法从而完成功能的增强
1 | 复制代码 1.常见的动态代理技术有: |
- jdk的动态代理:基于接口实现的
- cglib的动态代理:基于子类实现的
Spring的aop采用了哪种代理方式 - 如果目标对象有接口,就采用JDK动态代理技术
- 如果目标对象没有接口就采用cglib技术
AOP相关概念
1 | markdown复制代码连接点:能够被增强的方法都是连接点 |
AOP开发前要明确的事项
我们需要做的事情
1 | 复制代码编写核心业务(目标类的相关方法) |
Spring的AOP做的事情
1 | markdown复制代码生成动态代理的过程(把通知织入到切入点的过程),是由spring来实现的 |
基于xml的AOP
1 | 复制代码入门实现: |
1.导入aop的依赖
2.创建目标类和通知类
1 | csharp复制代码 public interface UserService { |
1 | csharp复制代码 public class UserServiceImpl implements UserService { |
通知类(增强类):
1 | csharp复制代码 public class MyAdvice { |
3.写配置文件
通知类型的介绍
1 | xml复制代码 前置通知 <aop:before> 通知方法在切入点方法之前执行 |
切面表达式的抽取,如果我们对一个方法在不同位置进行增强时,切面表达式重复多余,所以我们可以进行抽取
基于注解的AOP
第一步:开启AOP自动代理和IOC扫描包
1 | ini复制代码<context:component-scan base-package="com.albb"/> |
第二步:在增强类和目标类头上打上注解让spring为其创建对象
第三步:在增强类头上打上@Aspect注解,告诉spring我是增强类,是用来做增强的
第四步:在通知方法上打上@After(切面表达式)…注解告诉spring要增强在目标方法的哪个位置,要增强哪个方法
1 | less复制代码@Component |
纯注解的方式
1 | less复制代码纯注解是依赖于核心配置类的,我们创建一个核心配置类 |
基于XML的声明事务控制
1 | 复制代码1.定义事务的管理员 |
1 | markdown复制代码2.定义事务规则 |
3.定义切面
注解的方式声明事务控制
1 | 复制代码1.定义事务管理员 |
1 | ini复制代码<tx:annotation-driven transaction-manager="tm"/> |
1 | css复制代码3.在要开启事务的类或者方法上添加@Transactional |
纯注解的方式声明事务控制
1 | java复制代码1.定义配置类 |
本文转载自: 掘金