SpringBoot3使用xml配置注入

SpringBoot3使用xml配置注入

原先版本开头是这样的

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

spring6 sringboot3版本开头是这样的

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

http://www.springframework.org/schema/beans/spring-beans.xsd
http换成了https
https://www.springframework.org/schema/beans/spring-beans.xsd




启用(起用)xml注入

@ImportResource注解启用xml注入

如在某个组件类上或主类上添加 @ImportResource("classpath:beans.xml")

application.properties 的 spring.config.import 不能用于引入xml




例子

例子240311

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="LifeCycleTest2403110139" class="z24dec.msbtLifeCycle.LifeCycleTest2403110139" 
    	init-method="initMethod" 
    	destroy-method="destroyMethod"
    	>
    </bean>
</beans>




@ImportResource

在Spring Boot中,@ImportResource是一个注解,它用于引入一个或多个Spring XML配置文件。这个注解可以用在@Configuration类上,以便将XML中定义的bean整合到Spring Boot应用程序的上下文中。

以下是如何使用@ImportResource注解的示例:

首先,你需要创建一个XML配置文件,例如legacy-config.xml,并将其放置在src/main/resources目录下:

<!-- src/main/resources/legacy-config.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="legacyService" class="com.example.LegacyService">
        <!-- 配置属性和依赖 -->
    </bean>

    <!-- 其他bean定义 -->

</beans>

然后,在你的Spring Boot主类或其他@Configuration类上使用@ImportResource注解来导入XML配置文件:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource("classpath:legacy-config.xml")
public class MySpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }

}

在上面的示例中,@ImportResource("classpath:legacy-config.xml")告诉Spring Boot在启动时要加载legacy-config.xml文件中定义的bean。这样,legacyService bean以及其他在XML文件中定义的bean将被注入到Spring应用程序上下文中,可以像使用其他Spring Bean一样使用它们。

虽然Spring Boot支持XML配置,但它鼓励开发者使用基于Java的配置和注解,因为这样可以更好地利用Spring Boot的自动配置特性,并提供更清晰、更类型安全的配置方式。不过,如果你正在迁移旧的Spring应用程序到Spring Boot,或者需要集成第三方库提供的XML配置,@ImportResource可以是一个有用的工具。




application.properties 的 spring.config.import 不能用于引入xml

在 Spring Boot 2.4 及更高版本中,spring.config.import 属性被引入,用于提供一种新的方式来导入配置数据,包括来自其他文件、目录或数据源的属性。然而,spring.config.import 主要是用于导入属性配置,而不是直接用于导入 Spring XML 配置。

尽管 spring.config.import 可以指向文件、目录或 URI,但它预期的是属性文件格式(如 .properties.yml/.yaml),而不是 Spring 的 XML 配置文件。因此,你不能直接使用 spring.config.import 来导入 XML 配置。

如果你需要导入 XML 配置,应该继续使用 @ImportResource 注解,这是专门为此目的而设计的。@ImportResource 允许你在 Spring Boot 的 Java 配置类中引入一个或多个 XML 配置文件。

例如:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource({"classpath:legacy-config1.xml", "classpath:legacy-config2.xml"})
public class XmlConfigImport {
    // 此类不需要额外的代码,它的存在只是为了导入 XML 配置
}

在上面的例子中,XmlConfigImport 类使用 @ImportResource 注解导入了两个 XML 配置文件。然后,你可以确保这个配置类被 Spring Boot 扫描到,或者通过其他方式将其包含在你的应用程序上下文中。

总之,spring.config.import 属性不适用于导入 XML 配置;相反,你应该使用 @ImportResource 注解来实现这一目的。




springboot有几种方法使用spring的xml注入bean

在Spring Boot中使用Spring的XML来注入bean主要有以下几种方法:

  1. 使用@ImportResource注解
    这是最常见的方法,可以在Spring Boot的@Configuration类上使用@ImportResource注解来指定XML配置文件的路径。Spring Boot在启动时将会加载这些XML文件,并将其中定义的bean注入到应用程序上下文中。

    @SpringBootApplication
    @ImportResource("classpath:beans.xml")
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
  2. 使用ApplicationContextInitializer
    可以创建一个实现ApplicationContextInitializer接口的类,并在该类中编程方式加载XML配置文件。然后,将这个初始化器注册到Spring Boot应用程序中。

    public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext applicationContext) {
            XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader((BeanDefinitionRegistry) applicationContext.getBeanFactory());
            reader.loadBeanDefinitions("classpath:beans.xml");
        }
    }
    

    注册ApplicationContextInitializer

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.addInitializers(new MyApplicationContextInitializer());
        app.run(args);
    }
    

    或者在spring.factories文件中配置:

    org.springframework.context.ApplicationContextInitializer=com.example.MyApplicationContextInitializer
    
  3. 使用Spring的ClassPathXmlApplicationContext
    虽然这不是Spring Boot特有的方法,但你可以在任何需要的地方使用ClassPathXmlApplicationContext来加载XML配置文件。然而,这种方法通常不推荐在Spring Boot主应用程序中使用,因为它会绕过Spring Boot的自动配置和其他特性。

    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    MyBean myBean = context.getBean(MyBean.class);
    
  4. 通过Spring Boot的application.propertiesapplication.yml
    尽管spring.config.import主要用于导入属性配置,但理论上你可以通过一些间接的方式使用它来加载资源,比如通过自定义的PropertySourceLocatorEnvironmentPostProcessor。然而,这并不是spring.config.import的直接用途,且通常不推荐用于加载XML配置。

需要注意的是,尽管Spring Boot支持XML配置,但其设计初衷是为了简化Spring应用程序的初始化和开发过程,通过约定优于配置的原则来减少必要的配置。因此,在可能的情况下,最好使用基于Java的配置和注解来代替XML配置。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot使用 XML 注入 Bean 的详细链路如下: 1. 在 `src/main/resources` 目录下创建 Spring 配置文件 `applicationContext.xml`。 2. 在 `application.properties` 文件中添加以下配置,告诉 Spring Boot 使用 XML 配置文件: ``` spring.main.allow-bean-definition-overriding=true spring.config.name=application spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/ ``` 其中,`spring.main.allow-bean-definition-overriding` 配置允许 Bean 的重复定义;`spring.config.name` 配置指定配置文件的名称,默认为 `application`;`spring.config.location` 配置指定配置文件的位置,可以是类路径或文件路径。 3. 在 `applicationContext.xml` 文件中定义需要注入的 Bean,例如: ```xml <bean id="myBean" class="com.example.MyBean"> <property name="name" value="Spring Boot"/> </bean> ``` 其中,`id` 属性为 Bean 的唯一标识符,`class` 属性为 Bean 的类名,`property` 标签用于设置 Bean 的属性值。 4. 在需要使用该 Bean 的类中,通过 `@Autowired` 注解或构造函数注入该 Bean,例如: ```java @RestController public class MyController { @Autowired private MyBean myBean; // ... } ``` 或者: ```java @RestController public class MyController { private final MyBean myBean; public MyController(MyBean myBean) { this.myBean = myBean; } // ... } ``` 5. 运行 Spring Boot 应用,Spring 会自动扫描 `applicationContext.xml` 文件并加载定义的 Bean,然后将其注入到需要的类中。 需要注意的是,在 Spring Boot 中,推荐使用基于 Java配置方式,即使用 `@Configuration`、`@Bean` 等注解来定义和注入 Bean,而不是使用 XML 配置文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值