在Spring应用程序中,可以使用applicationContext.getBeansOfType(Object.class)
检索所有(?)Bean。当然,只有在创建了所有Bean之后,这才有可能。
因此,如果我在Bean的构造函数中调用此方法,我必须很幸运,成为最后一个要创建的Bean,才能访问所有它们。
据我所知,Spring Bean的life cycle在初始化Bean之前有一个阶段,即创建BeanDefinition。
Class
)吗?类型BeanDefinition似乎只提供“此bean定义的当前bean类名称” 。或者是在构造完所有Bean(例如@PostConstruct
)之后获取那些类型的唯一方法吗?
答案 0 :(得分:1)
您可以通过以最小的初始化顺序将它放置在@Configuration
类中来创建最后一个bean,这样它就是最后一个
@Order(Ordered.LOWEST_PRECEDENCE)
,就这样:
@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class Last {
@Autowired
ApplicationContext applicationContext;
@Bean
public String lastBean() {
applicationContext.getBeanDefinitionNames(); //retrive all created BeanDefinitions in the constructor of a Bean
applicationContext.getBeansOfType(Object.class); //retrive the types (as Class)
return "lastBean";
}
}
答案 1 :(得分:1)
也许这段代码有帮助
for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {
BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
String className = beanDefinition.getBeanClassName();
Class<?> clazz = Class.forName(className);
}
循环使您获得所有BeanDefinition
,然后为每个加载类并执行所需的操作?
通过这种方式,这可能不是使用Spring的好方法,但它可以工作。