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