亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決springboot的aop切面不起作用問題(失效的排查)

 更新時(shí)間:2020年04月26日 11:14:43   作者:pu.xiao.zhang  
這篇文章主要介紹了解決springboot的aop切面不起作用問題(失效的排查),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過來看看吧

檢查下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)文章

  • java兩種單例模式用法分析

    java兩種單例模式用法分析

    這篇文章主要介紹了java兩種單例模式用法,結(jié)合實(shí)例形式對(duì)比分析了java實(shí)現(xiàn)單例模式的兩種常見技巧,需要的朋友可以參考下
    2016-08-08
  • 三道java新手入門面試題,通往自由的道路--多線程

    三道java新手入門面試題,通往自由的道路--多線程

    這篇文章主要為大家分享了最有價(jià)值的3道多線程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 如何實(shí)現(xiàn)java8 list按照元素的某個(gè)字段去重

    如何實(shí)現(xiàn)java8 list按照元素的某個(gè)字段去重

    這篇文章主要介紹了如何實(shí)現(xiàn)java8 list按照元素的某個(gè)字段去重,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • SpringBoot?ApplicationContext接口深入分析

    SpringBoot?ApplicationContext接口深入分析

    ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽事件,加載資源文件等
    2022-11-11
  • 解決IDEA中pom.xml文件變?yōu)榛疑膯栴}

    解決IDEA中pom.xml文件變?yōu)榛疑膯栴}

    這篇文章主要給大家介紹了如何解決IDEA中pom.xml文件變?yōu)榛疑膯栴},文中通過圖文結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • 反編譯jar實(shí)現(xiàn)的三種方式

    反編譯jar實(shí)現(xiàn)的三種方式

    本文主要介紹了反編譯jar實(shí)現(xiàn)的三種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot 單元測(cè)試JUnit的實(shí)踐

    Spring Boot 單元測(cè)試JUnit的實(shí)踐

    JUnit是一款優(yōu)秀的開源Java單元測(cè)試框架,也是目前使用率最高最流行的測(cè)試框架,這篇文章主要介紹了Spring Boot 單元測(cè)試JUnit的實(shí)踐,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java中的EnumMap集合解析

    Java中的EnumMap集合解析

    這篇文章主要介紹了Java中的EnumMap集合解析,EnumMap是Map接口的一種實(shí)現(xiàn),專門用于枚舉類型的鍵,所有枚舉的鍵必須來自同一個(gè)枚舉,
    EnumMap不允許鍵為空,允許值為空,需要的朋友可以參考下
    2023-09-09
  • Java的JSON格式轉(zhuǎn)換庫(kù)GSON的初步使用筆記

    Java的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
  • Mac?M1安裝JDK的實(shí)戰(zhàn)避坑指南

    Mac?M1安裝JDK的實(shí)戰(zhàn)避坑指南

    這篇文章主要給大家介紹了關(guān)于Mac?M1安裝JDK避坑的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論