在实例化阶段之前/期间检索 Bean 类

在 Spring 应用程序中,可以使用applicationContext.getBeansOfType(Object.class). 这当然只有在创建了所有 Beans 之后才有可能。

所以,如果我在一个 Bean 的构造函数中调用这个方法,我必须很幸运,成为最后一个被创建的 Bean,才能访问所有这些 Bean。

据我了解 Spring Beans 的生命周期,在 Bean 初始化之前有一个创建 BeanDefinitions 的阶段。

  • 如何在 Bean 的构造函数中检索所有创建的 BeanDefinitions?

  • 我还可以检索Class那些 BeanDefinitions 的类型吗?BeanDefinition类型似乎只提供“此 bean 定义的当前 bean 类名”

或者是在构造完所有 Bean 之后获得这些类型的唯一方法(例如@PostConstruct)?


RISEBY
浏览 92回答 2
2回答

翻过高山走不出你

也许这段代码可以帮助&nbsp; &nbsp; for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {&nbsp; &nbsp; &nbsp; &nbsp; BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);&nbsp; &nbsp; &nbsp; &nbsp; String className = beanDefinition.getBeanClassName();&nbsp; &nbsp; &nbsp; &nbsp; Class<?> clazz = Class.forName(className);&nbsp; &nbsp; }循环让你得到所有的BeanDefinitions 然后你为每个加载类并做你想做的事?顺便说一句,这可能不是使用 Spring 的好方法,但它会起作用。

慕莱坞森

您可以创建最后一个 bean,例如将它放在@Configuration具有最小初始化顺序的类中,这样它就是最后一个带有 的 bean @Order(Ordered.LOWEST_PRECEDENCE),就是这样:@Configuration@Order(Ordered.LOWEST_PRECEDENCE)public class Last {&nbsp; &nbsp; @Autowired&nbsp; &nbsp; ApplicationContext applicationContext;&nbsp; &nbsp; @Bean&nbsp; &nbsp; public String lastBean() {&nbsp; &nbsp; &nbsp; &nbsp; applicationContext.getBeanDefinitionNames();&nbsp; &nbsp; //retrive all created BeanDefinitions in the constructor of a Bean&nbsp; &nbsp; &nbsp; &nbsp; applicationContext.getBeansOfType(Object.class); //retrive the types (as Class)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return "lastBean";&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java