spring面向切面编程示例(xml配置形式vs@注解形式)

一、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);
    }
}

 

转载于:https://www.cnblogs.com/xyhero/p/9434312.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值