Spring - AOP之AspectJ(注解)
发布日期:2021-06-30 23:47:22 浏览次数:2 分类:技术文章

本文共 3103 字,大约阅读时间需要 10 分钟。

Ps:访问修饰符,可有可无。

 

Ps:当然 JoinPoint 形参当中也可以去掉的。

Ps:around方法返回值为 Object 是因为针对目标方法如果有返回值的情况。

package com.imooc.aspectJ.demo1;public class ProductDao {    public void save(){        System.out.println("保存商品...");    }    public String update(){        System.out.println("修改商品...");        return "hello";    }    public void delete(){        System.out.println("删除商品...");    }    public void findOne(){        System.out.println("查询一个商品...");        //int i = 1/0;    }    public void findAll(){        System.out.println("查询所有商品...");//        int j = 1/0;    }}
package com.imooc.aspectJ.demo1;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;/** * 切面类 */@Aspectpublic class MyAspectAnno {    @Before(value="myPointcut1()")    public void before(JoinPoint joinPoint){        System.out.println("前置通知=================="+joinPoint);    }    @AfterReturning(value="myPointcut2()",returning = "result")    public void afterReturing(Object result){        System.out.println("后置通知=================="+result);    }    @Around(value="myPointcut3()")    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {        System.out.println("环绕前通知================");        Object obj = joinPoint.proceed(); // 执行目标方法        System.out.println("环绕后通知================");        return obj;    }    @AfterThrowing(value="myPointcut4()",throwing = "e")    public void afterThrowing(Throwable e){        System.out.println("异常抛出通知=============="+e.getMessage());    }    @After(value="myPointcut5()")    public void after(){        System.out.println("最终通知==================");    }    @Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.save(..))")    private void myPointcut1(){}    @Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.update(..))")    private void myPointcut2(){}    @Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.delete(..))")    private void myPointcut3(){}    @Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findOne(..))")    private void myPointcut4(){}    @Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findAll(..))")    private void myPointcut5(){}}
package com.imooc.aspectJ.demo1;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class SpringDemo1 {    @Resource(name="productDao")    private ProductDao productDao;    @Test    public void demo1(){        productDao.save();        productDao.update();        productDao.delete();        productDao.findAll();        productDao.findOne();    }}
运行结果:前置通知==================execution(void com.imooc.aspectJ.demo1.ProductDao.save())保存商品...修改商品...后置通知==================hello环绕前通知================删除商品...环绕后通知================查询所有商品...最终通知==================查询一个商品...

 

转载地址:https://lux-sun.blog.csdn.net/article/details/84337434 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring - AOP之AspectJ(XML)
下一篇:Spring - AOP之传统自动代理

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月25日 06时19分31秒