编程语言
首页 > 编程语言> > java-Spring静态自引用类模式的用例

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