java - 如何从不在 Spring 容器中的类访问 Spring Bean 的方法

标签 java spring spring-mvc

我不是 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/

相关文章:

java - 为什么这个 Spring 应用程序不起作用?

java - 关于服务、Daos 及其之间 - 初学者的困境

Spring MVC URIEncoding 无法正确发送请求参数

java - Spring Thymeleaf TemplateResolver 错误

java - 使用递归方法查找字符串中的单词数

java - 使用 Robospice 在 Android 上固定证书

java - 在多个项目中管理 Spring Boot 父 POM 版本

spring - 如何在Spring的AsyncRestTemplate上设置超时?

java - 搜索翻译的id时应该返回null还是-1?

Java 多线程 : how to wait for a method to return a valid value