静态方法访问春豆

2022-08-31 16:03:19

我有一个带有静态方法的 Util 类。在我的Util类中,我想使用弹簧豆,所以我将它们包含在我的util类中。据我所知,使用春豆作为静态场并不是一个好习惯。但是有没有办法用静态方法访问春豆呢?

我的例子:

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>

答案 1

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

例如:

@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


答案 2

静态方法的结果应该只取决于传递给方法中的参数,因此不需要调用任何bean。

如果您需要调用另一个 Bean,那么您的方法应该是独立 Bean 的成员方法。

其他答案为您提供了有效的解决方案,但可以完成的事实并不意味着应该完成。


推荐