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、测试类
- Service接口以及实现类
- Controller注入Service以及使用
3. AspectJ切面添加4类注解。
4. @EnableAspectJAutoProxy:开启AOP自动代理(这一步十分关键)
- 控制台打印
补充:只有由Spring容器管理的AspectJ组件才可以生效切面注解功能,不经过容器管理是无法注解生效的。
经过容器管理可以生效注解。
未经过容器管理,注解失效(无任何打印)
3.测试异常抛出:
- 异常方法处理。
- 测试结果如下:
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官方文档学习笔记之基于注解的Spring AOP