applicationContext.xml 是 Spring 传统 XML 配置文件,用于定义 Bean 和容器行为,非必需;可通过 web.xml 配置 ContextLoaderListener 或 ClassPathXmlApplicationContext 显式加载,需注意路径前缀、命名空间及 schemaLocation 正确性。

applicationContext.xml 是 Spring 的 XML 配置文件,用于声明 Bean 和容器行为
它不是必须存在的文件,也不是 Spring 启动的唯一方式——只是传统 XML 配置模式下的一个约定名称。Spring 容器(ApplicationContext)可以通过它加载 Bean 定义、配置 AOP、事务、数据源等。现代项目多用 Java Config(@Configuration)或注解驱动(@ComponentScan),但遗留系统或特定集成场景仍常见该文件。
如何让 Spring 读取 applicationContext.xml
关键在初始化容器时显式指定路径,而不是依赖默认扫描。常见方式有:
- Web 环境:在
web.xml中通过ContextLoaderListener指定contextConfigLocation参数,例如:contextConfigLocation classpath:applicationContext.xml - 非 Web 环境(如单元测试或独立应用):手动创建容器:
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");注意路径前缀:classpath:表示从类路径查找;file:表示绝对/相对文件系统路径 - Spring Boot 中不推荐直接使用:若强行启用,需关闭默认配置并设置
spring.main.web-application-type=none,再用@ImportResource("classpath:applicationContext.xml")
applicationContext.xml 常见写法与易错点
它本质是 XML,遵循 Spring 的 XSD 约束(如 http://www.springframework.org/schema/beans)。典型结构包括命名空间声明、 定义、属性注入等。容易出问题的地方:
- 忘记声明命名空间或 schemaLocation 错误,导致解析失败,错误信息类似:
org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict -
id或name重复,引发BeanDefinitionStoreException: Invalid bean definition - 使用
ref引用未定义的 bean,运行时报NoSuchBeanDefinitionException - 混淆
constructor-arg和property:前者按参数顺序/类型匹配构造函数,后者调用 setter 方法;类型不匹配时不会报错但可能注入 null
最小可用示例:
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
XML 配置和注解方式混用时要注意什么
可以共存,但需明确启用对应支持。例如,在 applicationContext.xml 中必须显式开启注解处理:
- 加
才能识别@Autowired、@Value等 - 加
才能自动注册@Service、@Repository类为 Bean - 二者顺序有影响:如果 XML 中先定义了某个 bean,而后
component-scan又扫到同名类,默认会跳过(避免重复注册),除非设use-default-filters="false"
真正麻烦的是调试——当一个 Bean 既在 XML 中定义,又被注解标记,又在 Java Config 中声明,最终生效的是最后注册的那个,而这个顺序取决于加载顺序,很难直观判断。









