在非spring应用程序中使用spring应用程序作为库

时间:2015-06-17 20:23:10

标签: spring dependency-injection spring-boot

我实现了spring-boot应用程序,现在我想将它用作非Spring应用程序的lib。 如何初始化lib类,以便自动连接的依赖项按预期工作?显然,如果我使用'new'创建类实例,则所有自动连接的依赖项都将为null。

2 个答案:

答案 0 :(得分:0)

理论是,您需要实例化应用程序上下文以使Spring Boot依赖项存在,然后从那里提取一个bean并加以利用。

实际上,在您的Spring Boot依赖项中,您应该有一个Application.java类或一个类似的类,其中main方法将启动应用程序。首先添加一种类似这样的方法:

public static ApplicationContext initializeContext(final String[] args) {
    return SpringApplication.run(Application.class, args);
}

下一步,在主应用程序中,当您认为合适时(我会在启动时说,但也可能是您第一次使用依赖项),您需要运行以下代码:

final String[] args = new String[0]; // configure the Spring Boot app as needed
final ApplicationContext context = Application.initializeContext(args); // createSpring application context
final YourBean yourBean = (YourBean)context.getBean("yourBean"); // get a reference of your bean from the application context

您可以在这里视需要使用豆子。

答案 1 :(得分:0)

我不确定在尝试从构造函数等访问某些Bean之前如何等待上下文完全加载。但是,如果您只想访问上下文而无需手动创建组件,请尝试以下一种方法: / p>

1)只需注入ApplicationContext

@Inject
private ApplicationContext context;

2)实现ApplicationContextAware

public class ApplicationContext implements ApplicationContextAware {
  private ApplicationContext context;

  @Override
  public void setApplicationContext(ApplicationContext context) {
      this.context = context;
  }

  // just quick example, better to set it to your custom singleton class
  public static ApplicationContext getContext() {
    return context;
  }
}

然后使用context.getBean(SomeServiceFromLibrary.class);