0

我知道 bean 加载的顺序是由依赖项和传递依赖项隐式确定的。

想象一下,您有一组带注释的 bean,它们为您提供某种元数据,您希望将这些元数据应用于另一组 AwareBean。因此,只有在您从 N 个 bean 中收集了所有元数据之后,您才能对 AwareBeans 进行后期处理。你通常使用org.springframework.beans.factory.config.BeanPostProcessor这种东西。但是如何处理订单?我认为即使depends-on明确设置也不会优先于加载顺序的依赖关系,对吧?

有一个接口org.springframework.core.Ordered只决定 beanPostProcessors 的应用顺序,而不是 bean 的顺序。

我可以使用org.springframework.beans.factory.config.BeanFactoryPostProcessor,但 bean 定义在 bean 实例化之前没有足够的信息。例如beanDef.getBeanClass() 返回 bean 类名等。

这是你能想到如何做我想做的任何其他方式吗?

4

2 回答 2

0

你可以:

a) 将所有元数据 bean 注入您的BeanPostProcessor.

b) 让您的后处理器在启动时主动从应用程序上下文中获取所有元数据 bean。

每种方式都有利有弊,但效果是一样的:在BeanPostProcessor后构造之后,每个元数据 bean 也将已经被后构造。

于 2012-09-29T16:45:24.447 回答
0

我通过类加载器使用org.springframework.beans.factory.config.BeanFactoryPostProcessor和加载类来解决它,以便我可以使用反射来获取注释。我认为它不应该破坏任何东西,因为之后当spring要类加载时,bean类类加载器会检查该类是否已经加载,如果是则不加载它。否则它会加载它。

于 2012-09-29T21:06:07.553 回答