java-Spring静态自引用类模式的用例
作者:互联网
我最近偶然发现了以下代码.
@Component
public class Instance {
private static Instance instance;
private final Template template;
public Instance(Template template) {
this.template = template;
Instance.instance = this;
}
static void someMethod() {
instance.template.doSomething();
}
}
根据我的理解,这样做是为了使您可以在静态方法中使用模板,但是再次可以将Instance类注入到需要的位置,并且完全避免使用静态方法.
@Component
public class Instance {
private final Template template;
public Instance(Template template) {
this.template = template;
}
void someMethod() {
template.doSomething();
}
}
我很好奇这种模式的用例,如果有任何替代方案,谢谢!
解决方法:
[edit]刚刚意识到,静态字段是私有的,因此不能暴露给非Spring外部世界,如下所述.
在那种情况下,我看不出有任何理由这样做.实例Bean通过Spring的“单例”作用域是单例的.因此,引入此静态私有字段没有任何意义,因此您所建议的显然是正确的方法.
[编辑前]
我想这样做是为了将实例Spring Bean暴露给与Spring不相关的其他代码,即某些非Spring代码可以调用Instance.someMethod()
但是在我看来,这仍然不是一个好主意,因为它在Spring bean中增加了非直观的责任:“如何从Spring外部进行访问?”.那么,对于另一个Spring bean,我们该怎么做呢?将此Spring反模式添加到所有Spring bean吗?
如果需要在一个或几个地方进行此操作,我建议使用@Configurable对要在其中注入依赖项的类进行Spring-ify类化.
否则,我建议应用程序集中处理此“春季到非春季”互操作,并且与bean无关:也许在启动ApplicationContext时隐藏并在内部检索与Spring无关的API的bean.
标签:self-reference,static,spring,java 来源: https://codeday.me/bug/20191110/2013887.html