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

想象一下,您有一组带注释的 bean,它们为您提供某种元数据,您希望将其应用到另一组 AwareBeans。因此,只有在收集了 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类名等。

您还能想到如何做我想做的事吗?

有帮助吗?

解决方案 2

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

其他提示

你可以:

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

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

每种方式都有优点和缺点,但效果是一样的:后 BeanPostProcessor 后构造,每个元数据 bean 也已经被后构造。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top