以静态方法访问spring bean

新手上路,请多包涵

我有一个带有静态方法的 Util 类。在我的 Util 类中,我想使用 spring bean,所以我将它们包含在我的 util 类中。据我所知,将 spring bean 用作静态字段不是一个好习惯。但是有没有办法以静态方法访问spring bean?

我的例子:

 public class TestUtils {

   private static TestBean testBean;

   public void setTestBean(TestBean testBean) {
     TestUtils.testBean = testBean;
   }

  public static String getBeanDetails() {
    return beanName = testBean.getDetails();
  }
}

我在许多论坛上看到这不是最佳做法。有人可以告诉我如何处理这种情况吗?

我的配置文件:

 <bean id="testUtils" class="com.test.TestUtils">
 <property name="testBean" ref="testBean" />
</bean>

原文由 Rosh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 663
1 个回答

我的方法是针对希望访问实现 InitializingBean 或使用 @PostConstruct 并包含对自身的静态引用的 bean。

例如:

 @Service
public class MyBean implements InitializingBean {
    private static MyBean instance;

    @Override
    public void afterPropertiesSet() throws Exception {
        instance = this;
    }

    public static MyBean get() {
        return instance;
    }
}

因此,您的静态类中的用法只是:

 MyBean myBean = MyBean.get();

这样,不需要 XML 配置,不需要将 bean 作为构造函数参数传递,调用者不需要知道或关心 bean 是使用 Spring 连接起来的(即,不需要凌乱的 ApplicationContext 变量)。

原文由 nullPainter 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题