如何使用Spring在Helper类中获取自动装配的bean

时间:2017-08-13 12:24:18

标签: java spring spring-mvc spring-boot dependency-injection

我想知道,在helper类中获取bean的最佳方法是什么,因为你不能在那里使用@Autowired。 我现在正在做的是我在@Service / @ Component /中自动装配,然后将构造函数中的bean传递给helper类。我不认为这是正确的做法,因为可能有太多事情无法通过。

这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:2)

我假设助手类不是由Spring管理的。可以选择在此类中使用@Configurable(需要AspectJ)。 Take a look at the Documentation for more info

答案 1 :(得分:1)

public class SpringContextHolder implements ApplicationContextAware {
    public static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextHolder.applicationContext = applicationContext;
    }
}

<bean class="SpringContextHolder" lazy-init="false"/> xml配置。

现在您可以使用SpringContextHolder.applicationContext.getBean(name)等静态上下文。

答案 2 :(得分:0)

您可以实现ApplicationContetAware来获取应用程序上下文,然后将其放在(静态?)变量中。

public class MyClass implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
}

您可以将applicationContext设为静态,并将应用程序上下文传递给它。

然后使用applicationContext.getBean(...)

答案 3 :(得分:0)

我假设辅助类只是做一些静态方法操作。辅助类的基本示例是EmployeeUtil,ProductUtil等,如果您看到您的进程可以通过静态方法完成;然后跳过使用@Autowired并以静态方式访问。

@Configurable是AOP加载时编织使用的标记;在这种情况下可能是一个开销。

如果您仍然看到需要@Autowired对象,则通过容器注入将提供清晰的代码,而不是每次使用new关键字创建对象。