首页 > 其他分享 >springboot 工程中 SpringApplication.run方法 可以指定加载"applicationContext.xml"文件吗

springboot 工程中 SpringApplication.run方法 可以指定加载"applicationContext.xml"文件吗

时间:2024-09-25 14:50:52浏览次数:11  
标签:xml applicationContext run 配置文件 SpringApplication XML

在 Spring Boot 应用程序中,SpringApplication.run() 方法默认使用自动配置和基于 Java 的配置(如使用 @Configuration 注解的类),而不是传统的 XML 配置文件(如 applicationContext.xml)。Spring Boot 的设计理念之一就是简化配置,鼓励使用注解和 Java 配置来代替 XML 配置。

然而,如果你确实需要使用 XML 配置文件(比如迁移遗留项目),Spring Boot 提供了几种方式来实现这一点。

方法一:使用 @ImportResource 注解

你可以在你的配置类上使用 @ImportResource 注解来加载 XML 配置文件。例如:

java复制代码
  @SpringBootApplication
  @ImportResource("classpath:applicationContext.xml")
  public class MySpringBootApplication {
   
  public static void main(String[] args) {
  SpringApplication.run(MySpringBootApplication.class, args);
  }
   
  }

这种方式允许你在 Spring Boot 应用程序中继续使用 XML 配置文件。

方法二:通过编程方式

如果你不想在配置类上使用注解,也可以在创建 ApplicationContext 时通过编程方式添加 XML 配置文件。但是,在 Spring Boot 中,你通常会使用 SpringApplication.run() 方法来启动应用程序,该方法内部已经封装了 ApplicationContext 的创建过程。因此,直接通过编程方式添加 XML 配置文件到 ApplicationContext 可能不是最直接的方法。不过,你可以通过自定义 SpringApplicationBuilder 来实现:

java复制代码
  public static void main(String[] args) {
  new SpringApplicationBuilder(MySpringBootApplication.class)
  .sources(new Class[]{MySpringBootApplication.class})
  .properties("spring.config.location=classpath:applicationContext.xml")
  .run(args);
  }

注意:上述 properties("spring.config.location=classpath:applicationContext.xml") 的使用实际上是不正确的,因为 spring.config.location 通常用于指定外部配置文件的位置,而不是 XML 配置文件。正确的方式是使用 @ImportResource 注解或者通过 ApplicationContextInitializer 来加载 XML 文件。

方法三:使用 ApplicationContextInitializer

你可以通过实现 ApplicationContextInitializer 接口来在 ApplicationContext 被刷新之前加载 XML 配置文件:

java复制代码
  public class XmlConfigApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
   
  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {
  XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(applicationContext);
  reader.loadBeanDefinitions("classpath:applicationContext.xml");
  }
   
  }
   
  // 在 SpringApplication.run() 中注册这个初始化器
  public static void main(String[] args) {
  SpringApplication app = new SpringApplication(MySpringBootApplication.class);
  app.addInitializers(new XmlConfigApplicationContextInitializer());
  app.run(args);
  }

这种方式提供了更大的灵活性,尤其是在需要动态地根据条件加载不同 XML 配置文件时。

总结

虽然 Spring Boot 鼓励使用注解和 Java 配置,但它也提供了灵活的方式来支持 XML 配置文件。你可以根据你的具体需求选择最适合你的方法。

标签:xml,applicationContext,run,配置文件,SpringApplication,XML
From: https://www.cnblogs.com/wzihan/p/18431362

相关文章

  • onnxruntime c++ 推理例子
    资源释放的问题。onnxruntime的对象release是无效的,从接口源码上只是将指针赋空。并未实际释放。要实现释放,需要以指针形式实现。一个例子如下:#include<onnxruntime_cxx_api.h>voidtestimage(){Matimage=imread("ae14.jpg",IMREAD_UNCHANGED); //创建会话选项 O......
  • bootstrapping in the main distro: listing WSL distros: running WSL xxxx
    bootstrappinginthemaindistro:listingWSLdistros:runningWSLcommandwsl.exeC:\Windows\System32\wsl.exe-l-v--all:contextdeadlineexceeded解决办法重启WSL服务:打开PowerShell,并运行以下命令来重启LxssManager服务netstopLxssManagernetstartLxssMan......
  • WPF Textblock Run glyphFontSize TextDecorations
    <Windowx:Class="WpfApp412.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 为什么会出现vcruntime140_1.dll丢失?无需重装系统,这里有vcruntime140_1.dll丢失最全修
    为什么会出现vcruntime140_1.dll丢失?vcruntime140_1.dll是MicrosoftVisualC++RedistributablePackage的一部分,它是许多Windows应用程序正常运行所必需的。当计算机出现vcruntime140_1.dll丢失的问题时,通常是由以下几个原因造成的:安装问题:安装不完整或损坏:某些应用程......
  • java解析xml
    参考资料水平有限,欢迎交流千问ai阿伟的反射知识学习泛型知识学习软件设计模式(java版)程细柱目标xml<?xmlversion="1.0"encoding="UTF-8"?><conf><farm>SGFarm</farm><student><name>李四</name>&......
  • 万象更新 Html5 - js: js 的跨域请求 XMLHttpRequest
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-js:js的跨域请求XMLHttpRequest示例如下:js\XMLHttpRequest.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>XMLHttpR......
  • XML 数据类型有问题
    我想将XML文件转换为CSV。但是,我不断收到错误AttributeError:'NoneType'objecthasnoattribute'integer'。xmlparse=Xet.parse('AppleMusicLibrary.xml')root=xmlparse.getroot()foriinroot:Track_ID=i.find("Tack......
  • XMLHttpRequest、Fetch、Axios和AJAX的关系
    一、基于http协议用于前后端通信的工具1、XMLHttpRequest(原生JS对象)XMLHttpRequest(XHR)是原生JavaScript对象。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据。特性:浏览器广泛支持功能丰富:可以跟踪请求的状态、支持进度事件、文件上传、同步......
  • 进程已结束,退出代码为 -1073740791 (0xC0000409)。QThread: Destroyed while thread i
            在使用pycharm写代码发现代码运行不了,进程已结束,退出代码为-1073740791(0xC0000409),但是又不提示具体错在哪。为了得到更加清晰的错误原因,可如下操作:        ①点击debug旁边的三个小点moreactions,点击编辑。        ②勾选在控制台中......
  • ubuntu网口状态:DOWN、UP、RUNNING
    对Ubuntu系统中网口不同状态的理解一、ipaipa可查看所有网口状态二、ifconfigifconfig可查看被up起来的网口信息三、DOWN、UP、RUNNING当网口状态为DOWN时可用ifconfigens33up将网口up网口状态必须为UP才能设置IP、子网掩码等这个接口被标记为UP(已启用)、BR......