上一题下一题

@ImportResource加载XML BeanDefinition时与注解配置的覆盖关系

进阶版
来源:huawei中级工程师Spring Bean名称冲突Spring Bean注册与覆盖Spring BeanDefinition注册@ImportResource注解
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

核心看 Bean 名称是否冲突 以及容器是否允许覆盖,不是简单地规定 XML 一定优先于注解。

Bean 名称不同:XML 和注解定义都会注册,互不覆盖;按类型注入时若因此出现多个候选 Bean,可能需要用 @Qualifier 或 @Primary 消除歧义。@Primary 只影响注入选择,不会覆盖 BeanDefinition。 Bean 名称相同:如果允许覆盖,后注册的 BeanDefinition 替换先注册的定义。对于同一个 @Configuration 中通过 @ImportResource 导入 XML 的情况,配置类处理时通常先注册 @Bean 方法,再加载导入的 XML,因此 XML 定义可能覆盖同名的 @Bean 定义。 如果不允许覆盖,同名注册会报错。Spring Boot 2.1 起默认禁止 Bean 定义覆盖,可通过 spring.main.allow bean definition overriding=true 显式开启;具体项目还要结合 Spring 版本、容器配置和实际注册顺序判断。

登录后查看完整内容