Spring之AOP
时间:2022-04-24
本文章向大家介绍Spring之AOP,主要内容包括Advice、CGlib代理、Advisor、自动代理生成器、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
之前在另外一篇博文里介绍过AOP的概念, 这边不在赘述, 可以参考 AOP与动态代理
本文主要介绍Spring中AOP的应用.
切入点: 具体实现类的方法 连接点: 接口中的方法
Advice
- 前置MethodBeforeAdvice
- 后置AfterReturnAdvice
- 环绕MethodInterceptor
- ThrowsAdvice
1 public class MyServiceBeforeAdvice implements MethodBeforeAdvice{
2 @Override
3 public void before(Method method, Object[] args, Object target) throws Throwable {
4 System.out.println("MyServiceBeforeAdvice");
5 }
6 }
7
8 public class MyServiceAfterService implements AfterReturningAdvice{
9 @Override
10 public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
11 System.out.println("MyServiceAfterService");
12 }
13 }
14
15
16 public class MyMethodInterceptor implements MethodInterceptor{
17 @Override
18 public Object invoke(MethodInvocation invocation) throws Throwable {
19 System.out.println("before");
20 Object result = invocation.proceed();
21 System.out.println("after");
22 return result;
23 }
24 }
对应的xml写法
1 <bean id="someService" class="day1207.ServiceImpl"/>
2
3 <bean id="myAdvice" class="day1207.MyServiceBeforeAdvice"/>
4 <bean id="myAdvice2" class="day1207.MyServiceAfterService"/>
5 <bean id="myAdvice3" class="day1207.MyMethodInterceptor"/>
6
7 <bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
8 <property name="target" ref="someService"/>
9 <property name="interceptorNames" value="myAdvice, myAdvice2, myAdvice3"/>
10 </bean>
CGlib代理
Spring中默认有接口的对象直接用的jdk动态代理实现的AOP, 无接口的对象用CGlib实现的.
如果想要强制都用CGlib实现, 则可以通过以下配置
1 <property name="optimize" value="true"/>
或者
1 <property name="proxyTargetClass" value="true"/>
Advisor
PointcutAdvisor: 可以指定具体切入点位置.
NameMatchMethodPointcutAdvisor 名称匹配
1 <bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
2 <property name="advice" ref="myAdvice2"/>
3 <!-- 匹配对象是简单方法名 -->
4 <property name="mappedNames" value="doFirst, doSecond"/>
5 </bean>
RegexpMethodPointcutAdvisor 正则匹配
1 <bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
2 <property name="advice" ref="myAdvice2"/>
3 <!--匹配全限定性方法路径-->
4 <property name="pattern" value=".*S.*"/>
5 </bean>
自动代理生成器
用于解决多个Bean需要对应多个代理的问题.
Advisor代理生成器
1 <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
缺点: 范围太广, 无法指定差异化Bean处理, 不能选择切面类型, 只能Advisor. 内部实现是用的BeanPostProcessor.
Bean名称自动代理生成器
1 <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
2 <property name="beanNames" value="someService"/>
3 <property name="interceptorNames" value="myAdvisor"/>
4 </bean>
- 每秒执行6000的简单SQL优化(二) (r10笔记第65天)
- 【Go 语言社区】GO语言练习:网络编程 ICMP 示例
- Golang的json操作
- 【Go 语言社区】golang协程——通道channel阻塞
- Oracle 12c PDB中碰到的DG问题 (r10笔记第63天)
- 上线必备 | 高性能ES5.X部署配置清单
- 【Go 语言社区】go 学习中遇到一些语法问题
- Elasticsearch全文检索实战小结——复盘我带的第二个项目
- 当12C PDB遇上JDBC (r10笔记第59天)
- 微信公众平台开发获取用户基本信息--转
- Elasticsearch检索分类深入详解—基础篇
- 通过Java程序测试数据库连接信息 (r10笔记第64天)
- GoldenGate安装简记(r10笔记第78天)
- 【Go 语言社区】各种变量的声明
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 一天一大 leet(二叉树展开为链表)难度:中等-Day20200802
- 一天一大 leet(字符串相加)难度:简单-Day20200803
- 一天一大 lee(恢复二叉搜索树)难度:困难-Day20200808
- 一天一大 leet(最小区间)难度:困难-Day20200801
- 一天一大 lee(全排列 II)难度:中等-Day20200918
- 一天一大 lee(冗余连接 II)难度:困难-Day20200917
- 一天一大 lee(左叶子之和)难度:简单-Day20200919
- 【一天一大 lee】 把二叉搜索树转换为累加树 (难度:简单)-Day20200921
- 【一天一大 lee】子集 (难度:中等)-Day20200920
- 用了这个jupyter插件,我已经半个月没打开过excel了
- Webpack学习笔记
- 正则表达式学习笔记
- R 可视化 | 华夫饼图
- 绝了!Python定时爬取微博热搜+pyecharts动态图展示
- 实战 | Python爬取B站柯南弹幕+Gephi梳理主线剧情