日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 切面 不执行,解决springboot的aop切面不起作用问题(失效的排查)

發布時間:2023/12/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 切面 不执行,解决springboot的aop切面不起作用问题(失效的排查) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

檢查下springboot的啟動類是否開啟掃描

@springbootapplication

@componentscan(basepackages = {"com.zhangpu.springboot"})

另外springboot默認開啟的enableaspectjautoproxy為true

如果不放心可以增加:

@enableaspectjautoproxy(proxytargetclass=true)

第二種可能:

沒有導入 相關的jar

org.aspectj

aspectjrt

org.aspectj

aspectjweaver

補充知識: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切面不起作用問題(失效的排查)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持萬仟網。

如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!

總結

以上是生活随笔為你收集整理的java 切面 不执行,解决springboot的aop切面不起作用问题(失效的排查)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。