无需显式配置即可更改bean后处理订单

时间:2012-09-29 09:51:39

标签: java spring post-processing

我知道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 个答案:

答案 0 :(得分:0)

你可以:

a)在BeanPostProcessor

中注入所有元数据bean

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

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

答案 1 :(得分:0)

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