如何在一个方法调用中只获取一个原型bean?

时间:2017-12-16 09:33:17

标签: java spring singleton prototype

我在单例bean中自动装配了一个ptototype 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

内存地址完全不同!

我应该如何修改代码以实现目标?

1 个答案:

答案 0 :(得分:0)

不要使用

ScopedProxyMode.TARGET_CLASS

使用@Lookup。

我发布了一个博客,但它是中文的。 https://www.jianshu.com/p/eee4a785cadc