如何将原型 spring bean 注入单例 bean

How Inject prototype spring bean to singleton bean

我想将我的 pojo class 更改为 spring,我在将 protoype bean 注入到 singelton bean 时遇到问题,我的旧代码如下:

public class InsertBankBusiness(){

    private ServiceInput input;
    
    public void doBusiness(ServiceInput input){
        this.input = input;
        ....
        }
},

public class BankService(){
    
    public void definebank(ServiceInput input){
        InsertBankBusiness insertBankBusiness = InsertBankBusiness ()
        insertBankBusiness .doBusiness(input)
        }

}

Insert BankBusiness class 不是线程安全的,我需要为每个服务调用从它实例化,我现在重写了代码如下:

@Component(value="insertBankBusiness")
@Scope(value="request", proxyMode=TARGET_CLASS)
public class InsertBankBusiness(){

    private ServiceInput input;

    public void doBusiness(ServiceInput input){
        this.input = input;
        ....
        }
},

@Service(value="bankService")
public class BankService(){

    @Autowire InsertBankBusiness insertBankBusiness;
    
    public void definebank(ServiceInput input){
        insertBankBusiness.doBusiness(input)
        }

}

第二种情况的行为是否与第一种情况相同?

不一样。
在第一种情况下,每次访问时都会创建 InsertBankBusiness 服务,但在第二种情况下,服务会为每个 HTTP 请求创建一次。
您需要使用 Prototype scope instead of Request 才能获得相同的行为。

    @Scope(value= "prototype", proxyMode=TARGET_CLASS)
    public class InsertBankBusiness {

    }

InsertBankBusiness 通过 Scoped Proxy 正确注入。每次调用代理对象上的方法时,代理自己决定是创建真实对象的新实例还是重用现有对象。