我不是 Spring亲,所以请多多包涵....
我有三个类(class):
class SpringBeanA {
public aMethod() {
.....
}
}
class SpringBeanB {
@Autowired SpringBeanA a;
public bMethod() {
a.method();
}
}
class NONSpringClass {
.....
b.method();
.....
}
b.method()
给出空指针错误,无论是通过实例访问 SpringBeanB b = new SpringBeanB()
还是将 SpringBeanB Autowiring 到 NONSpringClass。
Autowiring :
class NONSpringClass {
@Autowired SpringBeanB b;
.....
b.method();
.....
}
如何才能成功调用b.method()
?
最佳答案
Spring 初始化所有对象并将其保存在 Spring Application Context 中。您有几种不同的方法来访问应用程序上下文中的对象
首先创建一个 spring 配置类,将 ApplicationContext 注入(inject)到一个私有(private)属性中,并公开为静态方法。
@Configuration
class StaticApplicationContext implements ApplicationContextAware{
static ApplicationContext applicationContext = null;
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = context;
}
/**
* Note that this is a static method which expose ApplicationContext
**/
public static ApplicationContext getContext(){
return applicationContext;
}
}
现在你可以在你的非 spring 类中尝试这个,
((SpringBeanB)StaticApplicationContext.getContext.getBean("b")).bMethod();
请记住,在 spring 上下文初始化之前调用 getContext 方法可能会导致 NullPointerException。此外,不推荐在 spring 容器之外访问 bean。理想的方法是将所有 beans 移动到 spring 容器中进行管理。
如果您想从 Java Servelet 访问 SpringApplicationContext,请引用 WebApplicationContextUtils
关于java - 如何从不在 Spring 容器中的类访问 Spring Bean 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28005761/