[英]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.