学习Spring aop两种配置方式

aop

aop:面向切面编程,它可以解决重复代码。
aop有两种方式:

一、.xml方式

1、在springmvc-servlet.xml中配置aop,应用bean文件;
<!--aop配置-->
    <aop:config>
        <aop:aspect id="log" ref="loging">
            <!--第一个星号:返回值
                第二个星号:类
                第三个星号:方法
                小括号:方法入参-->
            <aop:pointcut id="print" expression="execution(* com.dait.controller.*.*(..))"/>
           <!-- <aop:before pointcut-ref="print" method="doBefore"/>
            <aop:after pointcut-ref="print" method="doAfter"/>-->
            <aop:around pointcut-ref="print" method="doAround"/>
            <aop:after-throwing pointcut-ref="print" method="doThrowing" throwing="ex"/>
        </aop:aspect>
    </aop:config>
2、在bean文件的类上加@Component

    @Component
    public class Loging {

        /**
         * 目标方法执行之前调用
         * @param
         */
      /*  public void doBefore(JoinPoint jp) {
            System.out.println(">>>>>doBefore>>>>>>>log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
        }*/

    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println(">>>>>doAround>>>>>>>log Begining method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());

        Object retVal = pjp.proceed();//执行目标方法

        System.out.println(">>>>>doAround>>>>>>>log Ending method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());

        return retVal;
    }
}

二、采用注解的方式

1、在springmvc-servlet.xml文件中添加注解配置
<!--启用注解代理-->
    <aop:aspectj-autoproxy/>
    
2、在bean文件上添加@Component和@Aspect,缺一不可
@Component
@Aspect
public class LogingAnnotation {

    public void doBefore(JoinPoint jp) {
        System.out.println(">>>>>doBefore>>>>>>>log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
    }


    @Around("execution(* com.dait.controller.*.*(..))")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long time = System.currentTimeMillis();
        System.out.println(">>>>>doAround>>>>>>>log Begining method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());
        Object retVal = pjp.proceed();//执行目标方法
        System.out.println(">>>>>doAround>>>>>>>log Ending method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());

        time = System.currentTimeMillis() - time;
        //pjp.getTarget().getClass().getName()  目前类包+类名
        //pjp.getSignature().getName()  目标方法

        return retVal;
    }

    public void doAfter(JoinPoint jp) {
        System.out.println(">>anno>>>doAfter>>>>>>>log Ending method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
    }


    public void doThrowing(JoinPoint jp, Throwable ex) {
        System.out.println(">>anno>>>doThrowing>>>>>>>method " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName() + " throw exception");
        System.out.println(ex.getMessage());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值