后置处理器大类分为容器级别的后置处理器以及Bean级别的后置处理器:
- BeanDefinitionRegistryPostProcessor
public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
}
允许在正常的BeanFactoryPostProcessor检测开始之前注册更多的自定义beandefinition。
例如,使用该后置BeanDefinitionRegistryPostProcessor注册一个bean。
public class User{}
@Configuration
public class CustomizedBeanDefinitionPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
Class<User> clazz = User.class;
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
GenericBeanDefinition definition = (GenericBeanDefinition) builder.getRawBeanDefinition();
registry.registerBeanDefinition("user5", definition);
}
}
-
BeanFactoryPostProcessor
主要用于影响容器中的行为。
@FunctionalInterface
public interface BeanFactoryPostProcessor {
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
- BeanPostProcessor
Bean的后置处理器,其中包含两个回调方法,分别在Bean注册前和注册后调用。
@Configuration
public class CustomizedBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println(beanName + "注册前");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println(beanName + "注册后");
return bean;
}
}