applicationContext.xml是什么 如何用它来管理Spring容器

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

applicationcontext.xml是什么 如何用它来管理spring容器

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
  • idname 重复,引发 BeanDefinitionStoreException: Invalid bean definition
  • 使用 ref 引用未定义的 bean,运行时报 NoSuchBeanDefinitionException
  • 混淆 constructor-argproperty:前者按参数顺序/类型匹配构造函数,后者调用 setter 方法;类型不匹配时不会报错但可能注入 null

最小可用示例:

魔法映像企业网站管理系统

魔法映像企业网站管理系统

技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作

下载




  
    
  

  

XML 配置和注解方式混用时要注意什么

可以共存,但需明确启用对应支持。例如,在 applicationContext.xml 中必须显式开启注解处理:

  • 才能识别 @Autowired@Value
  • 才能自动注册 @Service@Repository 类为 Bean
  • 二者顺序有影响:如果 XML 中先定义了某个 bean,而后 component-scan 又扫到同名类,默认会跳过(避免重复注册),除非设 use-default-filters="false"

真正麻烦的是调试——当一个 Bean 既在 XML 中定义,又被注解标记,又在 Java Config 中声明,最终生效的是最后注册的那个,而这个顺序取决于加载顺序,很难直观判断。

https://www.php.cn/faq/2015174.html

发表回复

Your email address will not be published. Required fields are marked *