解決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 @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切面不起作用問題(失效的排查)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何實(shí)現(xiàn)java8 list按照元素的某個(gè)字段去重
這篇文章主要介紹了如何實(shí)現(xiàn)java8 list按照元素的某個(gè)字段去重,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06SpringBoot?ApplicationContext接口深入分析
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽事件,加載資源文件等2022-11-11Spring Boot 單元測(cè)試JUnit的實(shí)踐
JUnit是一款優(yōu)秀的開源Java單元測(cè)試框架,也是目前使用率最高最流行的測(cè)試框架,這篇文章主要介紹了Spring Boot 單元測(cè)試JUnit的實(shí)踐,感興趣的小伙伴們可以參考一下2018-11-11Java的JSON格式轉(zhuǎn)換庫(kù)GSON的初步使用筆記
GSON是Google開發(fā)并在在GitHub上開源的Java對(duì)象與JSON互轉(zhuǎn)功能類庫(kù),在Android開發(fā)者中也大受歡迎,這里我們就來看一下Java的JSON格式轉(zhuǎn)換庫(kù)GSON的初步使用筆記:2016-06-06