Spring AOP 代理
2020-12-13 02:55
标签:ntc etc 测试 turn XML 连接 factor context git AOP 联盟为通知 Advice 定义了 Spring 按照通知 Advice 在目标类方法的连接点位置,可以分为 5 类 前置通知: 在目标方法执行前实施增强 后置通知: 在目标方法执行后实施增强 环绕通知: 在目标方法执行前后实施增强 异常抛出通知: 在方法抛出异常后实施增强 引介通知: 在目标类中添加一些新的方法和属性(Spring 中不支持,只支持对方法增强) ProxyFactoryBean 常用可配置属性: target:代理的目标对象 proxyInterfaces:代理要实现的接口 如果多个接口可以使用以下格式赋值: proxyTargetClass:是否对类代理而不是接口,设置为 true 时,使用 CGLib 代理 interceptorNames:需要织入目标的 Advice singleton:返回代理是否为单实例,默认为单例 optimize:当设置为 true 时,强制使用 CGLib(默认为 JDK 动态代理) 举个例子: 通知类: 首先要使用 AOP,我们需要导入两个包: 然后定义接口和实现类,再定义一个通知类(如前置通知),然后我们在 xml 文件中配置目标类和通知类,利用 Spring AOP 产生代理(通过bean配置),具体可参考上述例子,使用注解的方式在测试类中导入增强后的 bean:studentDaoProxy。 具体代码:SpringDemo3.demo1() 使用普通 Advice 作为切面,将对目标类所有方法进行拦截,不够灵活,在实际开发中常采用带有切点的切面。 常用 PointcutAdvisor 实现类 这里以 通知类: 具体代码:SpringDemo4.demo1() 前面的案例中,每个代理都是通过 解决方案:自动创建代理。 自动创建代理的三种方式: 对所有以 Dao 结尾 Bean 所有方法使用代理: 具体代码:SpringDemo5.demo1() 配置环绕代理案例: 具体代码:SpringDemo6.demo1() Spring AOP 代理 标签:ntc etc 测试 turn XML 连接 factor context git 原文地址:https://www.cnblogs.com/weixuqin/p/11061370.htmlSpring AOP 代理
1. Spring AOP 增强类型
org.aopalliance.aop.Interface.Advice
。
org.springframework.aop.MethodBeforeAdvice
ogr.springframework.aop.AfterReturningAdvice
ogr.aopalliance.intercept.MethodInterceptor
org.springframework.aop.ThrowsAdvice
org.springframework.aop.IntroductionInterceptor
2. Spring AOP 切面类型
3. Advisor 切面案例 (xml 配置)
applicationContext.xml
:
public class MyBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("前置增强========");
}
}
4. 演示(Advisor 方式)
5. PointcutAdvisor 切点切面
DefaultPointcutAdvisor
最常用的切面类型,它可以通过任意 Pointcut
和 Advice
组合定义切面JdkRegexpMethodPointcut
构造正则表达式切点JdkRegexpMethodPointcut
为例:applicationContext.xml
:
public class MyAroundAdvice implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
System.out.println("环绕前增强...");
// 执行目标方法
Object obj = methodInvocation.proceed();
System.out.println("环绕后增强...");
return obj;
}
}
6. 自动创建代理
ProxyFactoryBean
织入切面代理,在实际开发中,非常多的 Bean 每个都配置 ProxyFactoryBean
开发维护量巨大。
BeanNameAutoProxyCreator
根据 Bean 名称创建代理DefaultAdvisorAutoProxyCreator
根据 Advisor 本身包含信息创建代理AnnotationAwareAspectJAutoProxyCreator
基于 Bean 中的 AspectJ 注解进行自动代理(最主要方式)
7.
BeanNameAutoProxyCreator
举例
8.
DefaultAdvisorAutoProxyCreator
举例
上一篇:判断是对象还是数组的方法