Skip to content

高级 XML 配置

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

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.