为什么要使用AOP?
解决办法:传统方式
解决办法:Spring的AOP
AOP的相关概念
AOP的相关术语
AOP的底层实现,jdk的动态代理。使用jdk本身的一个类,即Proxy,使用其方法newProxyInstance,一,传递类加载器,第二传递接口,第三invoke方法。
AOP底层实现之 JDK动态代理(jdk动态代理可以对实现接口的类产生代理)
AOP底层实现之 CGLIB 生成代理。JDK动态代理只能对实现了接口的类实现动态代理。CGLIB的底层实现是生成了一个类。
Advisor切面准备工作
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
Advisor切面
单元测试 + 编程实现
定义自己的拦截器
spring的aop产生代理对象,将目标/接口/通知 进行整合在一块。
测试
其他的一些选项
编码实现带有切入点的通知(Advice)作为切面,使用环绕通知。这里的目标不是接口,而是类,所以产生代理(ProxyFactoryBean)时proTargetClass属性应设为true。
编码实现Spring自动创建代理
基于Bean名称的自动代理方式,优点是灵活,缺点是不能使用带有切点的切面。
spring的传统aop的基于切面信息的自动代理