1.Spring AOP应用
首先咱们来了解一下具体的业务场景(这是个真实的项目的业务场景):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增、修改、删除功能,当我们在对每个主档做这些操作时需要对其记录日志,注意系统中还有很多其他功能模块,但只对主档记录日志,在这里我通过自定义了一个主档注解,不然的话还真不好区分是否是主档。这时候就要使用到Spring的AOP功能了,代码如下(这里只写Spring AOP配置和AOP实现类,具体的业务bean就是serviceImpl里面的add、update、delete):
Spring AOP配置:
AOP实现类的bean
<bean id="commitLogServiceAop" class="com.yueya.oms.lmd.CommitLog.impl.CommitLogServiceAop"/>
AOP切点配置
<aop:config>
<!--主档新增异动切入点配置-->
<aop:pointcut id="masterFileAddPointcut"
expression="execution(* com.yueya..impl.*ServiceImpl.add*(..))"/>
<!--主档修改异动切入点配置-->
<aop:pointcut id="masterFileUpdatePointcut"
expression="execution(* com.yueya..impl.*ServiceImpl.update*(..))"/>
<!--主档删除异动切入点配置-->
<aop:pointcut id="masterFileDeletePointcut"
expression="execution(* com.yueya..impl.*ServiceImpl.delete*(..))"/>
<!--配置一个主档异动的切面Bean优先级为0,使用环绕通知-->
<aop:aspect id="commitLogAspect" ref="commitLogServiceAop" order="0">
<aop:around pointcut-ref="masterFileAddPointcut" method="execute"/>
<aop:around pointcut-ref="masterFileUpdatePointcut" method="execute"/>
<aop:around pointcut-ref="masterFileDeletePointcut" method="execute"/>
</aop:aspect>
</aop:config>
AOP实现类
public class CommitLogServiceAop {
@Autowired
protected CommitLogService commitLogService;
public Object execute(ProceedingJoinPoint jp) throws Throwable {
//通过主档注解@MasterFile判断当前实现类是否是主档实现类
Boolean annotation = jp.getTarget().getClass().isAnnotationPresent(MasterFile.class);
Object result;
String target = jp.getSignature().getName();//目标方法名称
Object[] args = jp.getArgs();//目标方法参数
result = jp.proceed(args);//执行目标方法并得到方法的返回值
if (annotation) {
RecordContext.getInstance().take(args[0], target, result);//记录日志的业务逻辑
}
return result;//将返回值返回给容器
}
}
1.Spring AOP应用的更多相关文章
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- spring aop
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...
- spring aop注解方式与xml方式配置
注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...
- 基于Spring AOP的JDK动态代理和CGLIB代理
一.AOP的概念 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...
- Spring AOP详解
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- Spring AOP实例——异常处理和记录程序执行时间
实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...
- 从零开始学 Java - Spring AOP 实现用户权限验证
每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...
- 从零开始学 Java - Spring AOP 实现主从读写分离
深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...
- 从零开始学 Java - Spring AOP 拦截器的基本实现
一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...
随机推荐
- Java跨平台的原理
使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有Java跨平台的特性, 事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的. Ja ...
- OpenTSDB/HBase的调优过程整理
背景 过年前,寂寞哥给我三台机器,说搞个新的openTSDB集群.机器硬件是8核16G内存.3个146G磁盘做数据盘. 我说这太抠了,寂寞哥说之前的TSDB集群运行了两年,4台同样配置的机器,目前hd ...
- mysql学习笔记--数据库事务
一.概念 1. 事务是一个不可分割的单元 2. 事务作为一个整体要么一起执行,要么一起回滚 二.事务操作 1. 开启事务 start transaction 或者begin [work] 2. 提交事 ...
- leetcode 字谜
242. Valid Anagram Easy 66298FavoriteShare Given two strings s and t , write a function to determine ...
- hystrix参数详解
hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKey Execution相关的属性的配置: hystrix. ...
- 关于为什么会涉足easyui
之前公司需要做一款类似于报价系统的功能,涉及到表单以及报表的统计, 这时分配给我,PHP也要开始弄easyui了 就这样走上了前端的路? 还挺感谢这些时间,有精力来学习额外的东西 不学习就会落后,ヾ( ...
- VSCode下调试mocha测试用例
之前使用tape做Node.js的单元测试,最方便一条就是使用它就和自己写个控制台应用程序测试一样,控制起来比较灵活,直接用VSCode进行调试也比较方便.然而tape输出中文字符总是乱码,想了很多办 ...
- 为什么text的值改变后onchange没有反应?
onchange发生在元素失去焦点后,而不是想象中的元素的值发生改变的时候.其实它的作用就跟onblur(失去焦点事件)差不多,只不过onchange是失去焦点且值发生了改变.要想实现目的,可以改用o ...
- 移值UCOS2到M4核与M3核的区别
之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...
- centos 7 常用工具篇
1.vmstat监控linux整体性能工具如查看命令:vmstat 1 4 2.用netstat查看网络连接,接口等信息如:netstat -an 3.dig 或者nslookup 跟踪yum解析过 ...