一、xml配置形式

1、在Spring配置文件中增加面向切面配置
当调用com.activemq.service.impl.ConsumerServiceImpl接口实现类的任意方法时执行切面类中的方法。

2、写切面类

注意:
1)不能对web层(比如:com.activemq.action.ConsumerController)做代理插入操作,亲测无效。
(之前认为对web层进行切面处理无效,其实不是,无效的原因在于切面配置所在的文件,如果是spring-mvc.xml(Springmvc的配置文件)中,就有效,如果在applicationContext.xml(Spring的配置文件)中,就无效。)
2)<aop:pointcut>如果位于<aop:aspect>元素中,则命名切点只能被当前<aop:aspect>内定义的元素访问到。为了能被整个<aop:config>元素中定义的所有增强访问,则必须在<aop:config>下定义切点。

二、@Aspect注解形式

1、配置

在spring配置文件applicationContext.xml中启用@Aspect,并声明通知类

<!-- 声明通知类 -->
<bean id="aspectBean" class="icom.axx.action.AopAspect" />
<!-- 启用spring对AspectJ注解的支持 -->
<aop:aspectj-autoproxy />

2、写通知类

package icom.axx.action;

import java.util.HashMap;
import java.util.Map;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import icom.axx.dao.AopAspectDao; /**
* 面向切面类
* 用于保存干线巡检手机端调用接口的信息。
* @author wangxiangyu
*
*/
@Aspect
public class AopAspect { @Autowired
AopAspectDao aopAspectDao; public static final String EDP = "execution(* icom.axx.service.impl.*..*(..))"; /**
* 前置通知:目标分方法调用之前执行
*/
@Before(EDP)
public void doBefore(JoinPoint jp){
}
/**
* 最终通知:
* 目标方法调用之后执行(无论目标方法是否出现异常均执行)
*/
@After(EDP)
public void doAfter(JoinPoint jp){
//获取类名
String className = jp.getTarget().getClass().getName();
//调用的方法名
String methodName = jp.getSignature().getName();
//调用方法的参数
Object[] argArr = jp.getArgs();
String arg = "";
if(null != argArr && argArr.length>0) {
for(Object argObj : argArr) {
arg += argObj.toString();
}
}
//若传递参数大于300字符,只截取前300个字符。
if(arg.length()>300) {
arg = arg.substring(0, 300);
}
Map<String, String> param = new HashMap<String, String>();
param.put("className", className);
param.put("methodName", methodName);
param.put("param_list", arg);
//插入tb_base_mobile_gxxj_record
aopAspectDao.saveInvokeInfo(param);
}
}

最新文章

  1. 使用VS Code开发 调试.NET Core 应用程序
  2. NIO框架Mina学习
  3. 使用dom4j解析XML文档
  4. 腾讯sdk学到了
  5. UVa(12821),MCMF
  6. vsftp.conf
  7. HTML5 input新增的几种类型(数字、日期、颜色选取、范围)
  8. 转载JQuery 获取设置值,添加元素详解
  9. Java和C++的区别
  10. Processing_百度百科
  11. JQuery Smart UI
  12. Fiddler手机抓包图文教程
  13. LeetCode &amp; Q268-Missing Number-Easy
  14. python批量启动多线程
  15. VS连接数据库字符串
  16. 基于MMSE的预测
  17. Springboot多数据源配置--数据源动态切换
  18. (转载)Unity学习笔记:关于Dropdown的学习
  19. C++ 并发编程,std::unique_lock与std::lock_guard区别示例
  20. webgl之观察三维空间

热门文章

  1. Python爬虫 爬取百合网的女人们和男人们
  2. jquery.filter() 实现元素前3个显示,其余的隐藏
  3. [转帖]UTC时间、GMT时间、本地时间、Unix时间戳
  4. spark-MLlib之协同过滤ALS
  5. Python——字典操作
  6. 爬虫系列之mongodb
  7. BATCH+VBS脚本自动执行命令
  8. Codeforces Round #530 (Div. 2) C D
  9. ubuntu16.04+cuda9+cudnn7+tensorflow+pycharm环境搭建
  10. JS学习笔记Day14