绝大多数新项目不该再用applicationcontext.xml;仅老系统升级、struts1共存或早期dubbo等三类场景需保留,且需注意id/name规则、import路径、null值写法等细节。

applicationContext.xml 文件现在还该用吗
绝大多数新项目不该再用 applicationContext.xml。Spring Boot 默认零 XML,Spring 5+ 官方已标记 XML 配置为“legacy”,维护成本高、IDE 支持弱、和注解/Java Config 混用时容易覆盖冲突。
只有三类情况可能还得碰它:
- 老系统升级卡在 Spring 3.x / 4.x,且暂时无法重构启动流程
- 需要与遗留的 Struts1 + Spring 2.5 共存(比如某些政务系统)
- 极少数中间件(如早期版本的 Dubbo 2.5)强制要求通过 XML 声明
ReferenceBean
bean 标签里 id 和 name 到底怎么选
id 是 XML 解析器校验过的唯一标识,必须符合 XML ID 规则(不能含空格、点、冒号等),Spring 启动时报错 Invalid bean definition with name 'xxx' 多半是 id 写成了 user.service.v1 这种非法值。
name 更宽松,支持别名逗号分隔(name="userService,userSvc"),但 IDE 不会索引 name,Ref 时写错别名也没提示。
- 优先用
id,保证唯一性和可追溯性 - 需要多别名时才加
name,不要只写name不写id - Spring 4.3+ 开始,
id缺失时会自动把name第一个值当id,但行为不可靠,别依赖
import 标签为什么总报找不到文件
常见错误是路径没搞清:XML 中的 import 默认按 classpath 解析,不是相对当前文件路径。写成 <import resource="config/jdbc.xml"></import>,实际要确保 config/jdbc.xml 在 src/main/resources/config/ 下,而不是和 applicationContext.xml 同目录。
- 绝对 classpath 路径加
classpath:前缀更安全,例如classpath:config/cache.xml - 不要用
file:,跨环境(IDE / Tomcat / Docker)路径行为不一致 - 如果被 import 的文件里也有
import,注意循环引用——Spring 不报错,但 bean 初始化顺序混乱,现象是某个@PostConstruct方法里取不到本该注入的 bean
property 标签设 null 或空字符串的写法
很多人以为 <property name="host" value=""></property> 就是设空字符串,其实这是设了长度为 0 的字符串;而真正设 null 必须用 <null></null> 标签。
这个区别在连接池(如 Druid)、序列化(如 Jackson)场景下会直接导致 NPE 或配置失效。
- 设空字符串:
<property name="host" value=""></property> - 设
null:<property name="host"><null></null></property> - 设空白字符串(含空格):
<property name="host" value=" "></property>,注意末尾没斜杠,否则 XML 解析失败
XML 配置里没有“未设置”状态,所有属性都会被初始化,哪怕你什么都没写,Spring 也会调用默认构造函数或设为类型默认值(如 int 为 0)。真要跳过初始化,得用 autowire-candidate="false" 或条件 profile 控制加载。










