Spring编程<六>

Spring编程<六>

接上次AOP的四中方法:第三种 注解形式

使用注解添加,是很简单是,演示一个例子:

第一种方式,注解加在函数上:

@Aspect
public class MyAdvisor  {

    @Pointcut(value="execution( * cn..Cat.*(..) )") //由Pointcut中的values属性来指定  切点的表达式----aspectj切点语言
    public void a(){
    }

    //由通知的value属性指定Pointcut----本例为aa()方法上的切点
    @Before(value="a()")
    public void before(){
        System.out.println("...前面拦截..");
    }

    @After(value="a()")//手动添加JoinPoint参数,可以活的被拦截的  连接点的信息
    public void after(JoinPoint jp){//缺点,依赖JoinPoint类,因此没必要就不需要
        //是否为方法执行,被拦截方法名,被拦截对象
        System.out.println("...后面拦截.."+jp.getKind()+","+jp.getSignature()+","+jp.getTarget());
    }
    @Around(value="a()")//around通知的拦截方法,必要依赖jp或p,因为需要放行
    public void around(ProceedingJoinPoint p) throws Throwable{
        //ProceedingJoinPoint extends JoinPoint
        System.out.println("前面拦.."+p.getKind()+","+p.getSignature()+","+p.getTarget());
        p.proceed();//放行
    }

    @AfterReturning(value="a()")
    public void afterReturn(){//该方法可以注入ProceedingJoinPoint
        System.out.println("方法正常返回之后:");//抓异常
    }
    @AfterThrowing(value="a()")
    public void afterThrowing(){//该方法可以注入ProceedingJoinPoint
        System.out.println("方法抛出异常之后:");//抛异常
    }
}

第二种方式:注解添加在变量上:


//切面=切点+通知
//@Aspect = @PointCut + (@Before | @After ...)

@Aspect
public class MyAdvisor2  {
    private final String CUT="execution( * cn..Cat.*(..) )";

    @Before(CUT)
    public void before(){
        System.out.println("...前面拦截..");
    }
}

然后还要在xml中配置:

<!-- 自动代理的标签 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>



    <bean id="p1" class="cn.hncu.v3.Person"></bean>
    <bean id="cat" class="cn.hncu.v3.Cat"></bean>
    <!-- 基于注解的切面 -->
<!--    <bean class="cn.hncu.v3.MyAdvisor"></bean> -->
    <bean class="cn.hncu.v3.MyAdvisor2"></bean>

使用的主要工具类

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值