Pro*_*Rev 7 java spring spring-mvc
我不是春天职业选手,所以请耐心等待....
我有三个班:
class SpringBeanA {
public aMethod() {
.....
}
}
class SpringBeanB {
@Autowired SpringBeanA a;
public bMethod() {
a.method();
}
}
class NONSpringClass {
.....
b.method();
.....
}
Run Code Online (Sandbox Code Playgroud)
b.method()在通过实例进行接口SpringBeanB b = new SpringBeanB()并将SpringBeanB自动装配到NONSpringClass 时,会发出空指针错误.
自动装配:
class NONSpringClass {
@Autowired SpringBeanB b;
.....
b.method();
.....
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能成功打电话b.method()?
kam*_*oor 11
Spring初始化所有对象并将其保存在Spring Application Context中.您可以通过几种不同的方式访问Application上下文中的对象
首先创建一个spring配置类,将ApplicationContext注入私有属性并作为静态方法公开.
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以在你的非春季班试试这个,
((SpringBeanB)StaticApplicationContext.getContext.getBean("b")).bMethod();
Run Code Online (Sandbox Code Playgroud)
请记住,在spring上下文初始化之前调用getContext方法可能会导致NullPointerException.也不建议在弹簧容器外部访问bean.理想的方法是将所有豆子移入弹簧容器进行管理.
如果要从java Servelet访问SpringApplicationContext,请参阅WebApplicationContextUtils