Spring编程<六>

来源:互联网 发布:吉大动物医学就业知乎 编辑:程序博客网 时间:2024/06/05 07:17

Spring编程<六>

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

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

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

@Aspectpublic 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 ...)@Aspectpublic 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>

使用的主要工具类

这里写图片描述

原创粉丝点击