欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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類中有個(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)類========
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)類上開(kāi)啟aop代理

@EnableAspectJAutoProxy(exposeProxy = true)

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

總結(jié)

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

相關(guān)文章

  • springmvc+mybatis 做分頁(yè)sql 語(yǔ)句實(shí)例代碼

    springmvc+mybatis 做分頁(yè)sql 語(yǔ)句實(shí)例代碼

    本文通過(guò)一段實(shí)例代碼給大家介紹了springmvc+mybatis 做分頁(yè)sql 語(yǔ)句的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-07-07
  • Java實(shí)現(xiàn)的簡(jiǎn)單數(shù)字時(shí)鐘功能示例

    Java實(shí)現(xiàn)的簡(jiǎn)單數(shù)字時(shí)鐘功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單數(shù)字時(shí)鐘功能,涉及java日期時(shí)間及JFrame框架圖形界面操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • springboot項(xiàng)目關(guān)閉swagger如何防止漏洞掃描

    springboot項(xiàng)目關(guān)閉swagger如何防止漏洞掃描

    這篇文章主要介紹了springboot項(xiàng)目關(guān)閉swagger如何防止漏洞掃描,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法對(duì)比

    Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法對(duì)比

    這篇文章主要為大家詳細(xì)介紹了Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • SpringBoot實(shí)現(xiàn)HTTP調(diào)用的七種方式總結(jié)

    SpringBoot實(shí)現(xiàn)HTTP調(diào)用的七種方式總結(jié)

    小編在工作中,遇到一些需要調(diào)用三方接口的任務(wù),就需要用到 HTTP 調(diào)用工具,這里,我總結(jié)了一下 實(shí)現(xiàn) HTTP 調(diào)用的方式,共有 7 種(后續(xù)會(huì)繼續(xù)新增),需要的朋友可以參考下
    2023-09-09
  • SpringBoot整合ShardingSphere的示例代碼

    SpringBoot整合ShardingSphere的示例代碼

    本文主要介紹了SpringBoot整合ShardingSphere的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java String保存字符串的機(jī)制

    Java String保存字符串的機(jī)制

    Java中字符串以什么格式來(lái)存儲(chǔ)?Java 中的 Unicode 字符串會(huì)按照 Latin1或者 UTF16 的編碼格式保存在 String 中,本文就詳細(xì)的介紹了一下,感興趣的可以了解一下
    2021-05-05
  • java中的過(guò)濾器 Filter應(yīng)用小結(jié)

    java中的過(guò)濾器 Filter應(yīng)用小結(jié)

    文章主要介紹了Java Web中的過(guò)濾器(Filter)的基本概念、生命周期、配置和應(yīng)用,過(guò)濾器可以攔截請(qǐng)求和響應(yīng),用于執(zhí)行一些預(yù)處理或后處理操作,如設(shè)置編碼、校驗(yàn)用戶身份等,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot中OKHttp和壓縮文件的使用實(shí)戰(zhàn)教程

    SpringBoot中OKHttp和壓縮文件的使用實(shí)戰(zhàn)教程

    本文介紹了如何在SpringBoot中使用OKHttp發(fā)起請(qǐng)求和處理壓縮文件,包括文件的存儲(chǔ)配置、實(shí)體類、配置類和初始化類的設(shè)置,以及如何通過(guò)主程序和測(cè)試類進(jìn)行實(shí)際操作,最后提供了必要的依賴添加方法,以確保功能的實(shí)現(xiàn)
    2024-10-10
  • 重啟Jenkins的三種方式及注意事項(xiàng)

    重啟Jenkins的三種方式及注意事項(xiàng)

    Jenkins是一款廣泛使用的持續(xù)集成工具,它允許開(kāi)發(fā)者自動(dòng)化構(gòu)建、測(cè)試和部署軟件,這篇文章主要介紹了重啟Jenkins的三種方式及注意事項(xiàng),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評(píng)論