簡體   English   中英

如何在一種方法調用中僅獲得一個原型bean?

[英]How to get only one prototype bean in one method invocation?

我在單例bean中自動連接了一個totototype bean。 為了獲得原型bean的其他bean,我用proxyMode對其進行了標記。 然后,副作用是巨大的:我總是得到多個實例。

這是我的示例代碼:

@Service
@Slf4j
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Duplicate {
public void serve() {
    log.error("{}", this);
}

public Duplicate get() {
    return this;
}
}

@Slf4j
@Service
public class Singleton {
@Autowired
private Duplicate d1;

public void serve(){
    Duplicate duplicate = d1.get();
    log.warn("d1 - 0 = {}", duplicate);
    log.warn("d1 - 1 = {}", duplicate);
    duplicate.serve();
}
}

和一個UT案例:

@Autowired
private Singleton singleton;
@Test
public void testOnScope(){
    singleton.serve();
}

輸出對我來說很奇怪:

Singleton - d1 - 0 = Duplicate@14f7e21a
Singleton - d1 - 1 = Duplicate@2bd9722
Duplicate - Duplicate@544cd64b

內存地址完全不同!

我應該如何修改代碼以實現目標?

不使用

ScopedProxyMode.TARGET_CLASS

使用@Lookup代替。

我公開發布了一個博客,但它是中文的。 https://www.jianshu.com/p/eee4a785cadc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM