无法使用ApplicationContextAware获取应用程序上下文对象

时间:2018-06-01 03:16:38

标签: java spring-boot

我有一个使用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。

1 个答案:

答案 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()
    }
}