首先咱们来了解一下具体的业务场景(这是个真实的项目的业务场景):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增、修改、删除功能,当我们在对每个主档做这些操作时需要对其记录日志,注意系统中还有很多其他功能模块,但只对主档记录日志,在这里我通过自定义了一个主档注解,不然的话还真不好区分是否是主档。这时候就要使用到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应用的更多相关文章

  1. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  2. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  3. spring aop

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...

  4. spring aop注解方式与xml方式配置

    注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...

  5. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

  6. Spring AOP详解

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  7. Spring AOP实例——异常处理和记录程序执行时间

    实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...

  8. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  9. 从零开始学 Java - Spring AOP 实现主从读写分离

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  10. 从零开始学 Java - Spring AOP 拦截器的基本实现

    一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...

随机推荐

  1. 我们一起踩过的坑----react(antd)(一)

    1.}]          && ){             ){ ){ ||){ ){ );); , }; }); }, beforeUpload: (file) => { ...

  2. 第三周博客总结 <西北师范大学| 周安伟>

    一,本周助教小结 工作稳步推进,时间分配合理,点评效率有所提高,主要进行了评分工作,工作情况都汇总到了Excel中. 二,助教本人博客       https://home.cnblogs.com/u ...

  3. linux环境下安装jmeter,启动执行脚本

    1.下载安装jmeter安装包 下载链接: https://pan.baidu.com/s/1KPhwNDsmTIAy41fEopHQEw 提取码: spwd 2.上传linux平台,解压jmeter ...

  4. python完整课程

    python完整课程 python课程概述 python课程大纲 链接:http://www.cnblogs.com/lx63blog/articles/9054294.html 课程结构: 1.安装 ...

  5. 【codelife 阿里技术文章分享——读后感】

    目前看到的几篇比较有感触的文章,分别是: 前端Leader如何做好团队规划?阿里内部培训总结公开   ——>这里会有关于针对技术项目如何做规划的一些指导,非常有价值 程序员吃的是青春饭?本质上取 ...

  6. java 基础 ----- Arrays 工具类

    -----  Arrays  工具类是一个比较方便的类 常用的方法 也可以通过jdk文档进行查看    右侧有偶 对一些比较常用的方法进行演示   直接放在main方法中进行测试 ----   equ ...

  7. swift 移除控制器中的已经存在的VC 注意

    1.要用 || 2. 如果使用这个代码 只会移除一个VC

  8. MySQL千万级数据库查询怎么提高查询效率

    在实际项目中,当MySQL表的数据达到百万级别时候,普通查询效率直线下降,而且当使用的where条件较多,其查询效率是让人无法容忍的.假如一个taobao订单查询详情要几十秒,可想而知的用户体验是多差 ...

  9. devexpress总结 accordionControl 加载panelcontrol 的快捷方式

    先说保存: UserControl control; private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars. ...

  10. 利用css实现带有省略号的段落

    带有省略号的段落就是你只能在一行显示一段文字,文字过长是肯定不能完全显示的,如果默认的话,超出的文字会自动换行,撑大盒子. 1.这时需要设置white-space: nowrap,禁止换行.这样的话, ...