6.aop AspectJ
2021/6/15 14:23:28
本文主要是介绍6.aop AspectJ,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
配置文件或者配置类
@Configuration @ComponentScan(basePackages ={"day506AOP"}) @EnableAspectJAutoProxy(proxyTargetClass =true) public class CofigAop { }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启注解扫描--> <context:component-scan base-package="day506AOP"></context:component-scan> <!--开启aspect生成代理对象--> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
实体类
@Component public class Stu { public void add(){ System.out.println("add...."); } }
stuProxy
@Component @Aspect @Order(2) public class StuProxy { //相同切入点抽取 @Pointcut(value ="execution(* day506AOP.anno.Stu.add(..))") public void pointCut(){ } //公共切入点使用 @Before(value = "pointCut()") public void before(){ System.out.println("before...."); } //在方法执行之后执行 不管有没有异常都执行也可以叫做最终通知 @After(value = "execution(* day506AOP.anno.Stu.add(..))") public void after(){ System.out.println("after...."); } //在方法返回结果之后执行 晚于after 抛异常就不执行 @AfterReturning(value = "execution(* day506AOP.anno.Stu.add(..))") public void afterReturning(){ System.out.println("afterReturning...."); } //异常通知也是在after之后执行 @AfterThrowing(value = "execution(* day506AOP.anno.Stu.add(..))") public void afterThrowing(){ System.out.println("afterThrowing...."); } //环绕通知抛异常后不执行环绕之后但是执行环绕之前 @Around(value = "execution(* day506AOP.anno.Stu.add(..))") public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{ System.out.println("环绕之前...."); proceedingJoinPoint.proceed(); System.out.println("环绕之后...."); } }
stuProxy2
@Component @Aspect @Order(1) public class StuProxy2 { @Before(value = "execution(* day506AOP.anno.Stu.add(..))") public void before(){ System.out.println("before 先执行......"); } @After(value = "execution(* day506AOP.anno.Stu.add(..))") public void after(){ System.out.println("after 后执行......"); } }
测试类:
public class AOPIntro { @Test public void testAnno(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("506bean8.xml"); Stu stu = context.getBean("stu", Stu.class); stu.add(); } //完全注解 @Test public void testCompleteAnno(){ ApplicationContext context=new AnnotationConfigApplicationContext(CofigAop.class); Stu stu = context.getBean("stu", Stu.class); stu.add(); } }
测试结果:
before 先执行...... 环绕之前.... before.... add.... 环绕之后.... after.... afterReturning.... after 后执行...... Process finished with exit code 0
这篇关于6.aop AspectJ的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享