@ControllerAdvice ,被注解的class表示这是一个增强的 Controller。
使用这个 Controller ,可以实现三个方面的功能:
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
解决不同package下bean重名的问题
//启动类注解 @SpringBootApplication @ComponentScan(nameGenerator=SelfBeanNameGenerator.class) //自定义beanNameGenerator public class SelfBeanNameGenerator extends AnnotationBeanNameGenerator { @Override protected String buildDefaultBeanName(BeanDefinition definition) { if (definition instanceof AnnotatedBeanDefinition) { String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition); if (StringUtils.hasText(beanName)) { return beanName; } } return definition.getBeanClassName(); } }
----
BeanPostProcessor 作用,
可以在bean初始化时做一些配置
该类接口如下;
public interface BeanPostProcessor { //bean初始化方法调用前被调用,修改beanDefinition,预处理
//实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; //实例化、依赖注入、初始化完毕时执行 Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException; }
bean初始化过程: