我想知道,在helper类中获取bean的最佳方法是什么,因为你不能在那里使用@Autowired。 我现在正在做的是我在@Service / @ Component /中自动装配,然后将构造函数中的bean传递给helper类。我不认为这是正确的做法,因为可能有太多事情无法通过。
这样做的最佳方式是什么?
答案 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关键字创建对象。