怎么静态调用Spring容器的bean

如何静态调用Spring容器的bean

 

    背景:

      最近工作中发现有个用法很有意思,如下代码:静态方法中引用Spring bean disconf的对象,这样就不用在B bean的用到disconf的地方声明然后注入这个bean了。相当于引入了第三个bean来实现解耦,这样用起来就很方便,直接调用静态方法即可。

      

    代码:

    

class A {
    private static DisconfService disconf;

    public static String getXProperty() {
        return disconf.xMethod();
    }
}

Class B {
    public void method() {
        A.getXProperty();
    }
}

    如何保证disconf 这个bean不为空呢?

 

    技术实现:

      1.  xml配置

    

class A {
    private static DisconfService disconf;

    public static String getXProperty() {
        return disconf.xMethod();
    }

    // 增加set方法
    public void setDisconf(DisconfService disconf) {
        A.disconf = disconf;
    }
}

 

<bean id="xx" class="A" >
   <p:disconf ref=disconf />
</bean>

 

     2. A实现InitianBean

     

class A implements InitialBean{

    @AutoWired
    private DisconfService disconfBean;

    private static DisconfService disconf;

    public void afterPropertiesSet() {
        A.disconf=disconfBean;
    }

    public static String getXProperty() {
        return disconf.xMethod();
    }
}