Spring 注解版 学习笔记面向AOP切面

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 注解版 学习笔记面向AOP切面相关的知识,希望对你有一定的参考价值。

前言:AOP在Spring中占着十分重要的角色,当然注解版我们也要进行关注和深究。

@Before前置通知,在方法执行之前执行
@After后置通知,在方法执行之后执行
@AfterRunning;返回通知,在方法返回结果之后执行
@AfterThrowing异常通知,在方法抛出异常之后
@Around环绕通知,围绕着方法执行

注意:要在Spring中声明AspectJ切面,只需要在I0C容器中将切面声明为Bean实例.当在Spring I0C容器中初始化AspectJ切面之后,Spring I0C容器就会为那些与AspectJ切面相匹配的Bean创建代理.

1.@Aspect:开启AOP
在这里插入图片描述

2.创建Service、controller、测试类

  1. Service接口以及实现类
    在这里插入图片描述
  2. Controller注入Service以及使用

在这里插入图片描述
3. AspectJ切面添加4类注解。

在这里插入图片描述
4. @EnableAspectJAutoProxy:开启AOP自动代理(这一步十分关键)

在这里插入图片描述

  1. 控制台打印

在这里插入图片描述
补充:只有由Spring容器管理的AspectJ组件才可以生效切面注解功能,不经过容器管理是无法注解生效的。

经过容器管理可以生效注解。
在这里插入图片描述
未经过容器管理,注解失效(无任何打印)

在这里插入图片描述
3.测试异常抛出:

  1. 异常方法处理。

在这里插入图片描述

  1. 测试结果如下:

在这里插入图片描述
3. 补充:注意JoinPoint要作为第一个参数,否则会抛出异常。

在这里插入图片描述

Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut 
	at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:227)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.obtainPointcutExpression(AspectJExpressionPointcut.java:198)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:177)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:226)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:289)
	at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:321)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:128)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:97)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:78)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:338)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:290)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:437)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1790)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
	... 35 more

会抛出绑定不上的异常,谨慎踩坑。。。

以上是关于Spring 注解版 学习笔记面向AOP切面的主要内容,如果未能解决你的问题,请参考以下文章

spring:AOP面向切面编程(注解)03

动力节点Spring框架学习笔记-王鹤AOP面向切面编程

Spring AOP面向切面编程详解

Spring AOP官方文档学习笔记之基于注解的Spring AOP

Spring基础IOC(控制反转)AOP(面向切面编程)Log4j注解配置

spring学习笔记四:AOP