Skip to content

高级 XML 配置 ​

MVC 命名空间没有高级模式。如果您需要自定义某个无法通过其他方式更改的 bean 属性,可以使用 Spring ApplicationContext 的 BeanPostProcessor 生命周期钩子,如下例所示:

java
@Component
public class MyPostProcessor implements BeanPostProcessor {

	public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
		// ...
		return bean;
	}
}
kotlin
@Component
class MyPostProcessor : BeanPostProcessor {

	override fun postProcessBeforeInitialization(bean: Any, name: String): Any {
		// ...
		return bean
	}
}

请注意,您需要将 MyPostProcessor 声明为一个 bean,既可以在 XML 中显式声明,也可以通过 <component-scan/> 声明让其被检测到。


补充教学 ​

1. 为什么 XML 没有“高级模式”? ​

XML 配置通常是由 mvc 命名空间(XML Schema)在后台自动生成 Bean 定义的。它虽然简单直观,但结构相对固定。对于不包含在 Schema 标签内的个性化定制,必须通过后处理器这种通用机制来介入。

2. BeanPostProcessor 的强大之处 ​

即使 Bean 是由框架自动创建的,BeanPostProcessor 也可以在 Bean 实例化之后、初始化之前(或之后)拦截到它。这意味着你可以获取到 RequestMappingHandlerAdapter 等核心对象,并调用其任何 Setter 方法进行微调,即便 XML 标签里没有提供对应的属性。

Based on Spring Framework.