解決springboot的aop切面不起作用問題(失效的排查)
檢查下springboot的啟動(dòng)類是否開啟掃描
@SpringBootApplication@ComponentScan(basePackages = {'com.zhangpu.springboot'})
另外springboot默認(rèn)開啟的EnableAspectJAutoProxy為true
如果不放心可以增加:
@EnableAspectJAutoProxy(proxyTargetClass=true)
第二種可能:
沒有導(dǎo)入 相關(guān)的jar
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId></dependency>
補(bǔ)充知識(shí):Springboot aop 實(shí)現(xiàn)全局配置事務(wù)
1.springboot實(shí)現(xiàn)事務(wù)只需要 在頭上加上@Transactional注解
@Transactional 默認(rèn)只捕獲RuntimeException.class
對(duì)Exception異常得需要 @Transactional(rollbackFor = {Exception.class}) 捕獲回滾。
2.當(dāng)項(xiàng)目特別大的時(shí)候,對(duì)所有的service 都加上事務(wù) ,顯得非常麻煩。可以通過aop 方式實(shí)現(xiàn)全局異常。
代碼如下。
這樣就能專注寫業(yè)務(wù)邏輯然后注意一下方法名就行了,當(dāng)然也可以用
source.addTransactionalMethod('*', txAttr_REQUIRED); 匹配所有方法,但是并不是所有的方法都需要事務(wù)的。所有推薦匹配方法名的方法
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@Configurationpublic 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切面不起作用問題(失效的排查)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 前端從瀏覽器的渲染到性能優(yōu)化2. JSP學(xué)生信息管理系統(tǒng)設(shè)計(jì)3. JSP的include指令的使用方法4. JSP頁面跳轉(zhuǎn)方法大全5. tomcat共享多個(gè)web應(yīng)用會(huì)話的實(shí)現(xiàn)方法6. HTML-Canvas的優(yōu)越性能以及實(shí)際應(yīng)用7. ASP.NET MVC增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體8. ASP.NET MVC實(shí)現(xiàn)登錄后跳轉(zhuǎn)到原界面9. python GUI框架pyqt5 對(duì)圖片進(jìn)行流式布局的方法(瀑布流flowlayout)10. PHP中file_get_contents設(shè)置header請(qǐng)求頭,curl傳輸選項(xiàng)參數(shù)詳解說明
