我们如何从CommandLineRunner类访问ApplicationContext。有没有比使用ApplicationContextAware更好的新方法
答案 0 :(得分:19)
自动装配可以作为一个字段
@Autowired
private ApplicationContext context;
或方法
@Autowired
public void context(ApplicationContext context) { this.context = context; }
真的与ApplicationContextAware
相同。
在任何情况下都是一种气味 - 也许如果你考虑一下你的用例,你会发现一种没有上下文的方法吗?
答案 1 :(得分:0)
@Bean
@Autowired
public CommandLineRunner listAllBeans(ApplicationContext applicationContext) {
return new CommandLineRunner() {
@Override
public void run(String... args) throws Exception {
String[] allBeanNames = applicationContext.getBeanDefinitionNames();
System.out.println("doing listAllBeans");
for(String beanName : allBeanNames) {
System.out.println(beanName);
}
}
};
}