首页 > 其他分享 >为什么同一个类中,不能一个方法调另一个方法,注解会失效?

为什么同一个类中,不能一个方法调另一个方法,注解会失效?

时间:2024-11-05 16:44:28浏览次数:4  
标签:调用 bean proxy 注解 方法 method 类中

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的。

原因:

spring 在扫描bean的时候会扫描方法上是否包含@Async注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,@Async注解就无效了。
例如:

@Service
class A{
    @Async
    method b(){
		System.out.println("我是b");
	}
    
    method a(){    
    	System.out.println("我是a");
        b();
    }
}
 
//Spring扫描注解后,创建了另外一个代理类:
class proxy$A{
    A objectA = new A();
    method b(){ 
        async();
        objectA.b();
    }
 
    method a(){
        objectA.a();
    }
}

当我们调用A的bean的b()方法的时候,被proxy$A拦截后,执行proxy$A.b(),异步生效。
当我们调用A的bean的a()方法的时候,被proxy$A拦截后,执行proxy$A.a(),没有执行async(),因此异步失效。

标签:调用,bean,proxy,注解,方法,method,类中
From: https://blog.csdn.net/weixin_43228381/article/details/143513533

相关文章

  • 【Java】常用类方法记录
    Arrays类java.util.Arrays返回类型方法描述static<T>List<T>asList(T…a)返回由指定数组支持的固定大小的列表。staticintbinarySearch(byte[]a,bytekey)使用二进制搜索算法在指定的字节数组中搜索指定的值。staticintbinarySearch(byte[]a,intfromIndex,in......
  • Devign方法复现——漏洞检测
    1、论文及代码    (1)论文:ZhouY,LiuS,SiowJ,etal.Devign:Effectivevulnerabilityidentificationbylearningcomprehensiveprogramsemanticsviagraphneuralnetworks[J].Advancesinneuralinformationprocessingsystems,2019,32.    (2......
  • C++——用指向指针的指针的方法对5个字符串排序并输出。
    没注释的源代码#include<iostream>#include<string.h>usingnamespacestd;voidsort(char**p);intmain(){  constintm=20;  char**p,*pstr[5],str[5][m];  for(inti=0;i<5;i++)    pstr[i]=str[i];  cout<<"pleaseinput5......
  • C++——用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个团数,整数
    没注释的源代码#include<iostream>usingnamespacestd;voidsortNumbers(int**arr,intn);intmain(){  intn;  cout<<"enterthenumberofintegers:";  cin>>n;  int**arr=newint*[n];  for(inti=0;i<n;i++)  {......
  • C++——输入一个字符串,内有数字和非数字字符,如a123x456_ 17960?302tab5876将其中连续
    没注释的源代码#include<iostream>#include<stdio.h>usingnamespacestd;intmain(){  charstr[50],*pstr;  inti,j,k,m,e10,digit,ndigit,a[10],*pa;  cout<<"pleaseinputstring:"<<endl;  gets(str);  pstr=&str[......
  • 前端开发之jsencrypt加密解密的使用方法和使用示
    1、安装组件npminstalljsencrypt--dev2、创建加密解密的方法文件3、文件内容importJSEncryptfrom'jsencrypt'//去密钥生成网址去生成公钥和密钥http://tools.jb51.net/password/rsa_encodeconstpublicKey='生成的公钥'//前端不建议存放私钥不建议解密数据因......
  • S7-1200对V90 PN进行位置控制的三种方法
    S7-1200系列PLC通过PROFINET与V90PN伺服驱动器搭配进行位置控制,实现的方法主要有以下三种:•方法一、在PLC中组态位置轴工艺对象,V90使用标准报文3,通过MC_Power、MC_MoveAbsolute等PLCOpen标准程序块进行控制,这种控制方式属于中央控制方式(位置控制在PLC中计算,驱动执行速度控制......
  • 记录一下从keil官网下载DFP(芯片支持包)的方法
    1.打开官网www.keil.arm.com2.点击右上角的下载按钮,进入下一页面3.选择MDK-ARM会进入到MDK下载页面。这里我们不用下载MDK。4.选择左下角的芯片列表按钮5.选择我们使用的芯片(我这里使用的是STM32L051系列)6.然后选择DFP7.在右上角选择下载DFP文件......
  • 探索水分仪的用途与水分测量方法
    水分仪:精准测量水分的得力工具在众多科学和工业领域中,水分仪是一款不可或缺的设备。它具有广泛的用途,为我们提供了准确、高效的水分测量方法。水分仪常用于农业领域,帮助农民确定土壤中的水分含量,从而合理安排灌溉,保障农作物的生长和产量。在食品加工行业,它能精准检测食品中的......