最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot aop切到service層,不生效問(wèn)題

 更新時(shí)間:2024年05月10日 11:43:06   作者:大喵快跑  
這篇文章主要介紹了springboot aop切到service層,不生效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot aop切到service層,不生效

發(fā)現(xiàn)一個(gè)問(wèn)題

使用aop切到service層方法上,idea會(huì)有切成功的標(biāo)志,編譯也不報(bào)錯(cuò),但就是不生效。

研究了下發(fā)現(xiàn),是因?yàn)槲仪械姆椒ū煌粋€(gè)service中的其他方法調(diào)用,這樣的話就不生效了,原因是切面只能對(duì)被spring代理的對(duì)象起作用,自己調(diào)用不行,解決方法是切到spring代理的方法上,這只是切點(diǎn)不生效的一種情況,給到大家參考。

AOP文件:

    //注釋掉的是原來(lái)不生效的方式
    //@AfterReturning("execution( * cn.qdcares.fodmonitor.web.api.fodmonitor.fodtask.service.impl.FodTaskServiceImpl.radarSubmitFodTask(..))")
    @AfterReturning("execution( * cn.qdcares.fodmonitor.web.api.fodmonitor.fodtask.service.impl.FodTaskServiceImpl.refreshRadarFodTask(..))")
    public void createFodAfterReturning(JoinPoint joinPoint){

service文件二者關(guān)系:

    //切到這里生效
    @Override
    public int refreshRadarFodTask(RadarFod radarFod) {
        //判斷數(shù)據(jù)庫(kù)中是否存在數(shù)據(jù)
        //從而進(jìn)行新增或更新操作
        Optional<FodTask> optional = fodTaskRepository.findByFodId(radarFod.getId());
        if (optional.isPresent()){
            updateFodTaskByFodId(radarFod);
            return 1;
        }
        radarSubmitFodTask(radarFod);
        return 1;

    }
    //切到這里不生效	
    @Override
    public int radarSubmitFodTask(RadarFod radarFod) {
 
        return 1;
    }

spring中aop無(wú)法攔截service層內(nèi)部方法調(diào)用

問(wèn)題描述

在service類(lèi)中有個(gè)a方法調(diào)用內(nèi)部b方法時(shí),無(wú)法攔截到b方法。

示例:

例如如下示例代碼,當(dāng)訪問(wèn)controller的hello方法時(shí),無(wú)法攔截service層testA方法中調(diào)用到的內(nèi)部testB方法。

package com.example.test.controller;
import com.example.test.service.Service;
 
 
================================================controller層========
@RestController
public class TestController{
 
	@Autowired
	Service service;
	
	@RequestMapping("")
	public void hello(String name)
	{
		service.testA(name);
	}
}
 
================================================Service層========
package com.example.test.service;
public class Service{
	public void testA(String name);
}
 
================================================Service實(shí)現(xiàn)類(lèi)========
package com.example.test.service.impl;
 
 public class ServiceImpl impl Service{
    @Override
    @Transactional
    public void testA(String name) {
		
		testB(name);
	}
	
	public void testB(String name){
	
	}
 
}
==========================ASPECT=============
@Component
@Aspect
@Order(1)
public class ServiceAspect {
 
 
    @Before("execution(* com.example.test..*.testA(..))")
    public void approve(JoinPoint joinPoint)
    {
        Object[] args = joinPoint.getArgs();
 
    }
}

解決方法

1.修改Service層的testA方法:

package com.example.test.service.impl;
 
 public class ServiceImpl impl Service{
    @Override
    @Transactional
    public void testA(String name) {
		
     ServiceImpl service = AopContext.currentProxy() != null 
                                  ? (ServiceImpl)AopContext.currentProxy() : this;
		service.testB(name);
	}
	
	public void testB(String name){
        System.out.println(name);
	
	}
 
}

2.在springboot啟動(dòng)類(lèi)上開(kāi)啟aop代理

@EnableAspectJAutoProxy(exposeProxy = true)

3.重新啟動(dòng)后,aop就能攔截到testB方法。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁(yè)查詢(xún)實(shí)現(xiàn)方法

    最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁(yè)查詢(xún)實(shí)現(xiàn)方法

    這篇文章主要介紹了最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁(yè)查詢(xún)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringMVC 實(shí)現(xiàn)用戶登錄實(shí)例代碼

    SpringMVC 實(shí)現(xiàn)用戶登錄實(shí)例代碼

    這篇文章主要介紹了SpringMVC 實(shí)現(xiàn)用戶登錄實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 在Java中解析JSON數(shù)據(jù)代碼示例及說(shuō)明

    在Java中解析JSON數(shù)據(jù)代碼示例及說(shuō)明

    這篇文章主要介紹了在Java中解析JSON數(shù)據(jù)的相關(guān)資料,文中講解了如何使用Gson和Jackson庫(kù)解析JSON數(shù)據(jù),并展示了如何將日期時(shí)間字符串轉(zhuǎn)換為時(shí)間戳,通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 解決IDEA中maven導(dǎo)入jar包一直報(bào)錯(cuò)問(wèn)題

    解決IDEA中maven導(dǎo)入jar包一直報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了解決IDEA中maven導(dǎo)入jar包一直報(bào)錯(cuò)問(wèn)題,本文通過(guò)實(shí)例圖文的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 如何使用Logback日志保存到相對(duì)路徑

    如何使用Logback日志保存到相對(duì)路徑

    在使用Logback中需要保存輸出日志,但是卻在保存的時(shí)候路徑出現(xiàn)問(wèn)題,下面通過(guò)案例代碼講解如何使用Logback日志保存到相對(duì)路徑,感興趣的朋友一起看看吧
    2025-05-05
  • Spring之什么是ObjectFactory?什么是ObjectProvider?

    Spring之什么是ObjectFactory?什么是ObjectProvider?

    這篇文章主要介紹了Spring之什么是ObjectFactory?什么是ObjectProvider?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • JAVA集成本地部署的DeepSeek的圖文教程

    JAVA集成本地部署的DeepSeek的圖文教程

    本文主要介紹了JAVA集成本地部署的DeepSeek的圖文教程,包含配置環(huán)境變量及下載DeepSeek-R1模型并啟動(dòng),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法介紹

    SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法介紹

    這篇文章主要介紹了SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • IDEA Maven依賴(lài)下載總是失敗的幾種解決方法

    IDEA Maven依賴(lài)下載總是失敗的幾種解決方法

    我們本地使用 IDEA 運(yùn)行 maven 項(xiàng)目的時(shí)候,有時(shí)候運(yùn)氣不好,就會(huì)遇到某些 maven 依賴(lài)無(wú)法正常找到、導(dǎo)入,這就會(huì)導(dǎo)致 IDEA 構(gòu)建項(xiàng)目的時(shí)候爆出一堆醒目的紅色 Error,今天給大家分享IDEA Maven依賴(lài)下載總是失敗的幾種解決方法,感興趣的朋友一起看看吧
    2023-09-09
  • SQLSyntaxErrorException-ExecutorException報(bào)錯(cuò)解決分析

    SQLSyntaxErrorException-ExecutorException報(bào)錯(cuò)解決分析

    這篇文章主要為大家介紹了SQLSyntaxErrorException-ExecutorException報(bào)錯(cuò)解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

天门市| 信丰县| 平顶山市| 民和| 天气| 沙田区| 会昌县| 津市市| 无锡市| 石林| 云安县| 壤塘县| 新郑市| 黄石市| 芮城县| 沙坪坝区| 霍邱县| 若羌县| 宜都市| 奎屯市| 双流县| 兴文县| 稷山县| 衡阳市| 南安市| 荃湾区| 崇明县| 上林县| 八宿县| 上蔡县| 江孜县| 体育| 天峻县| 昌黎县| 桑日县| 太仓市| 诸城市| 全州县| 怀集县| 杨浦区| 哈尔滨市|