【发布时间】:2021-02-23 23:50:16
【问题描述】:
我正在尝试在 Spring Boot 项目中使用 @autowired 注释,该项目不是由带有 @SpringBootApplication 注释的 main 方法启动的。相反,我确实创建了该 spring 项目的 jar,并且我将该 jar 用作遗留项目(非 spring 项目)中的外部 jar。 结果,当您从 main 方法运行应用程序时,我无法获取 ApplicationContext 并且所有由 spring 管理的 bean 都是空的。
是否可以将Spring boot项目用作.jar而不使用run main方法??
public class RetrieveSubscriberType {
public RetrieveSubscriberType() {
ApplicationContext appCtx = ApplicationContextUtils
.getApplicationContext();
this.subscriber = (SubscriberDAOImpl)appCtx.getBean("subscriber");
}
appCtx 始终为空
@Configuration
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext ctx;
@Override
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
ctx = appContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
ApplicationContextUtils 方法 setApplicationContext 没有被调用
【问题讨论】:
-
@Autowired注释是 Spring 框架的一部分,而不是 SpringBoot(如您所知,它使用它) - 在旧版应用程序中使用它应该没有问题。见tutorialspoint.com/spring/spring_autowired_annotation.htm -
好的,但是我没有 Beans.xml 文件和我的 @Configuration 注释类,没有被调用,因为我没有从 main 方法运行它。只是一个罐子,我尝试用自动装配的属性实例化一个类
-
没有细节,我猜你必须做什么。你的问题是:有可能吗?答案(和链接)表明是的,是的。
@Configuration注解需要注册到上下文中,见docs.spring.io/spring-framework/docs/current/javadoc-api/org/… -
请添加一个示例,说明您如何尝试在旧版应用程序中获取
ApplicationContext。 -
@Aivaras 我不想在旧版中获取 ApplicatioContext。但实际上在spring项目中。
标签: java spring spring-boot