spring之@ImportResource注解

该文介绍了如何在Spring中使用@ImportResource注解导入XML配置文件,展示了创建数据类Cat,配置文件applicationContext.xml,以及配置类SpringConfig的过程,并提供了测试方法。文章强调了@ImportResource在导入多个配置文件时的用法。

目录

1、简介

2、案例

 2.1、创建数据类Cat

2.2、创建配置文件 applicationContext.xml

2.3、创建配置类:

2.4、创建测试方法:


1、简介

@ImportResource 是导入 xml 配置,等同于 xml 文件的 resources


2、案例

 2.1、创建数据类Cat

package com.it.springboot.entity;
 
public class Cat {
    private String cardId;
    private String name;
    private Integer age;
 
    @Override
    public String toString() {
        return "Cat{" +
                "cardId='" + cardId + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public String getCardId() {
        return cardId;
    }
 
    public void setCardId(String cardId) {
        this.cardId = cardId;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

2.2、创建配置文件 applicationContext.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">
 
    <bean id="myCat" class="com.it.springboot.entity.Cat">
        <property name="cardId" value="001"/>
        <property name="name" value="tom猫"/>
        <property name="age" value="2"/>
    </bean>
 
</beans>

2.3、创建配置类:

package com.it.springboot.config;
 
import com.it.springboot.entity.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
 
/**
 * Configuration:表示当前类作为配置文件使用的,就是配置容器的。
 * 位置:在类的上面
 * SpringConfig这个类就相当于beans.xml
 */
@Configuration
@ImportResource(value = "classpath:applicationContext.xml")
public class SpringConfig {
    /**
     * 创建方法,方法的返回值是对象。在方法的上面加入@bean
     * 方法的返回值对象就注入到容器中。
     *
     * @Bean:把对象注入到spring容器中,作用相当于<bean></bean>
     * 位置:方法的上面
     *
     * 说明:@Bean,不指定对象的名称,默认是方法名的id
     */
    @Bean
    public Student createStudent(){
        Student s1=new Student();
        s1.setName("李四");
        s1.setAge(19);
        s1.setSex("女");
        return s1;
    }
 
    /**
     * 指定对象在容器中的名字
     * @return
     */
    @Bean(name = "lisiStudent")
    public Student makeStudent(){
        Student s2=new Student();
        s2.setName("小红");
        s2.setAge(22);
        s2.setSex("女");
        return s2;
    }
 
}

2.4、创建测试方法:

测试结果

 

当使用@ImportResource导入两个以上的配置文件时,外边加上大括号,中间用逗号隔开

 

 

<think>我们正在讨论Java中的@ImportResource注解。根据引用内容,这个注解用于在基于Java的配置中导入XML配置文件,使得Spring容器能够加载这些配置文件中的bean定义。引用[2]中提到,@ImportResource注解就像一位魔法师,能够将Spring配置文件导入到Spring应用中。引用[3]和[4]则进一步说明了它的使用场景:当我们在使用JavaConfig配置Spring时,如果需要集成已有的XML配置文件,就可以使用@ImportResource注解。具体使用方式:1.在配置类上使用@ImportResource注解。2.指定XML配置文件的位置(可以使用资源路径,如"classpath:application-context.xml")。3.如果需要指定BeanDefinitionReader,可以设置reader属性(默认为BeanDefinitionReader的实现类,根据文件后缀自动选择)。功能说明:-允许在基于Java的配置中混合使用XML配置。-方便迁移旧项目或集成第三方库的XML配置。-支持资源占位符解析(通过Environment)。示例代码:```java@Configuration@ImportResource("classpath:beans.xml")publicclassAppConfig{//其他Java配置...}```这样,Spring容器在加载AppConfig配置类时,也会同时加载beans.xml中定义的bean。相关问题:1.@ImportResource和@Import注解有什么区别?2.如何在@ImportResource中指定多个XML配置文件?3.使用@ImportResource导入XML配置时,如何解决bean之间的依赖?</think>### Java `@ImportResource` 注解详解 #### **功能说明** `@ImportResource` 是 Spring 框架中的注解,**用于在基于 Java 配置的 Spring 应用中导入 XML 配置文件**,实现 JavaConfig 与 XML 配置的混合使用。主要作用包括: 1. **集成旧配置**:兼容遗留系统的 XML 配置文件,避免重写为 JavaConfig[^2][^4]。 2. **资源占位符解析**:支持 `${property}` 形式的占位符,自动通过 `Environment` 解析[^1][^4]。 3. **指定解析器**:可自定义 `BeanDefinitionReader` 实现类(如 `XmlBeanDefinitionReader`)[^3][^4]。 #### **使用方式** 在配置类上添加注解并指定 XML 文件路径: ```java @Configuration @ImportResource("classpath:application-context.xml") // 导入单个文件 public class AppConfig { ... } ``` **高级用法**: 1. **多文件导入**: ```java @ImportResource({"classpath:dao-config.xml", "classpath:service-config.xml"}) ``` 2. **自定义解析器**: ```java @ImportResource( locations = "classpath:security-config.xml", reader = CustomBeanDefinitionReader.class // 指定自定义解析器 ) ``` 3. **占位符解析**: ```xml <!-- XML 中可使用占位符 --> <bean id="dataSource" class="..."> <property name="url" value="${db.url}"/> </bean> ``` #### **工作流程** 当 Spring 容器处理配置类时: 1. 扫描 `@ImportResource` 注解[^1][^4]。 2. 解析 `locations` 中的资源路径(支持 `classpath:`、`file:` 等前缀)。 3. 使用指定的 `BeanDefinitionReader` 加载 XML 中的 bean 定义。 4. 将解析的 `BeanDefinition` 注册到容器[^4]。 #### **注意事项** 1. **路径优先级**: `classpath:` 优先从类路径加载,`file:` 从文件系统加载。 2. **作用域限制**: 需标注在 `@Configuration` 类上,普通 `@Component` 类无效[^3]。 3. **与 `@Import` 区别**: `@Import` 用于导入 Java 配置类,`@ImportResource` 专用于 XML 文件[^3][^4]。 > **示例场景**:迁移旧系统时,核心模块用 JavaConfig 重构,但保留第三方库的 XML 配置[^2][^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值