解决springboot的aop切面不起作用问题(失效的排查)
2020-05-10 04:06
4147 查看
检查下springboot的启动类是否开启扫描
@SpringBootApplication
@ComponentScan(basePackages = {"com.zhangpu.springboot"})
另外springboot默认开启的EnableAspectJAutoProxy为true
如果不放心可以增加:
@EnableAspectJAutoProxy(proxyTargetClass=true)
第二种可能:
没有导入 相关的jar
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
补充知识:Springboot aop 实现全局配置事务
1.springboot实现事务只需要 在头上加上@Transactional注解
@Transactional 默认只捕获RuntimeException.class
对Exception异常得需要 @Transactional(rollbackFor = {Exception.class}) 捕获回滚。
2.当项目特别大的时候,对所有的service 都加上事务 ,显得非常麻烦。可以通过aop 方式实现全局异常。
代码如下。
这样就能专注写业务逻辑然后注意一下方法名就行了,当然也可以用
source.addTransactionalMethod("*", txAttr_REQUIRED); 匹配所有方法,但是并不是所有的方法都需要事务的。所有推荐匹配方法名的方法
package com.example.demo.aop; import org.aspectj.lang.annotation.Aspect; import org.springframework.aop.Advisor; import org.springframework.aop.aspectj.AspectJExpressionPointcut; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.interceptor.DefaultTransactionAttribute; import org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource; import org.springframework.transaction.interceptor.TransactionInterceptor; /** * @program: Druid * @description: * @author: ChenYu * @create: 2018-09-20 16:47 **/ @Aspect @Configuration public class TransactionAdviceConfig { private static final String AOP_POINTCUT_EXPRESSION = "execution(* com.example.demo.service.*.*(..))"; @Autowired private PlatformTransactionManager transactionManager; @Bean public TransactionInterceptor txAdvice() { DefaultTransactionAttribute txAttr_REQUIRED = new DefaultTransactionAttribute(); txAttr_REQUIRED.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); DefaultTransactionAttribute txAttr_REQUIRED_READONLY = new DefaultTransactionAttribute(); txAttr_REQUIRED_READONLY.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); txAttr_REQUIRED_READONLY.setReadOnly(true); NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource(); source.addTransactionalMethod("save*", txAttr_REQUIRED); source.addTransactionalMethod("delete*", txAttr_REQUIRED); source.addTransactionalMethod("update*", txAttr_REQUIRED); source.addTransactionalMethod("exec*", txAttr_REQUIRED); source.addTransactionalMethod("set*", txAttr_REQUIRED); source.addTransactionalMethod("get*", txAttr_REQUIRED_READONLY); source.addTransactionalMethod("query*", txAttr_REQUIRED_READONLY); source.addTransactionalMethod("find*", txAttr_REQUIRED_READONLY); source.addTransactionalMethod("list*", txAttr_REQUIRED_READONLY); source.addTransactionalMethod("count*", txAttr_REQUIRED_READONLY); source.addTransactionalMethod("is*", txAttr_REQUIRED_READONLY); return new TransactionInterceptor(transactionManager, source); } @Bean public Advisor txAdviceAdvisor() { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(AOP_POINTCUT_EXPRESSION); return new DefaultPointcutAdvisor(pointcut, txAdvice()); } }
以上这篇解决springboot的aop切面不起作用问题(失效的排查)就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- AOP(Aspect Oriented Programming)面向切面编程,aop解决的问题是什么(AOP模拟)
- 解决Spring MVC 对AOP不起作用的问题
- springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题
- 解决Spring MVC 对AOP不起作用的问题
- 解决Spring MVC 对AOP不起作用的问题
- 解决Spring MVC 对AOP不起作用的问题
- Shiro导致Service/DAO层 AOP切面失效问题
- 解决Spring MVC 对AOP不起作用的问题
- springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题
- 解决Spring MVC 对AOP不起作用的问题
- 惠普台式机必须按F1才能启动问题排查解决纪实
- 解决Karaf控制台dev:watch失效的问题
- 解决页头与页脚data-position="fixed" 有时失效的问题
- 解决layer 动态加载select 失效的问题
- 解决spring、springMVC重复扫描导致事务失效的问题
- 浏览器关闭使session失效的问题多种解决方式
- 关于加入aop切面controller无法注入问题导致报空指针
- SSI框架项目--切面,事务问题及解决方法
- ionic label中的控件失效问题解决
- java实战CPU占用过高问题的排查及解决