我有一个使用spring boot开发的微服务应用程序。我也有一个在同一个应用程序下的项目,它包含一些java类(非spring类)。我试图使用ApplicationContextAware方法使用这个非java类中的spring容器中的一些bean。当我在bootrun期间调试代码时,我可以看到setApplicationContext(ApplicationContext ctx)正在调用并且上下文已经设置。
当我从非spring spring java类里面尝试使用public static getApplicationContext()获取上下文的实例时,我的上下文为null。
下面是我使用过的示例。
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext context;
public ApplicationContext getApplicationContext() {
return context;
}
@Override
public void setApplicationContext(ApplicationContext ctx) {
context = ctx;
}
}
这是我尝试获取实例的方式
ApplicationContext c = ApplicationContextProvider.getApplicationContext();
我无法弄清楚这里缺少什么,因为我正在使用spring boot,我不认为需要在xml中配置任何bean。
答案 0 :(得分:0)
这对我的代码很有帮助。从上下文中获取提供程序后,我可以获得应用程序的启动时间。
@RestController
public class SampleController {
@Inject
ApplicationContextProvider provider;
@RequestMapping(value = "..", method = RequestMethod.GET)
public ResponseEntity<String> someMethod() throws IOException {
ApplicationContext c = provider.getApplicationContext();
System.out.println(c.getApplicationName());
c.getStartupDate()
}
}