Spring----》基于Java的容器注解之@ImportResource和@Value

本文介绍了如何使用@ImportResource和@Value进行资源文件读取。先展示了xml文件配置方式,通过property-placeholder加载properties资源文件,再用${}引用内容。接着说明了注解方式,用@ImportResource引入资源,@Value从资源文件取值,最后给出加载资源文件例子及单元测试类写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然 经常用   做个笔记  怕哪天忘了

如何使用@ImportResource和@Value进行资源文件读取。
首先看个例子,使用beans来定义一个配置

<beans>
    <context:annotation-config/>
    <context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>

    <bean class="com.acme.AppConfig"/>

    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
这个使用property-placeholder,在使用它的时候,它会对应一个资源文件,对应一个location,location对应一个资源文件的存放位置。<context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>这个这句话的作用是加载properties资源文件。properties文件是一种key、value的形式的文件。 
加载了这个文件之后 ,在当前的文件中,可以通过 ${} 的方式,{}里边是properties文件中的key,通过这种方式来引用properties文件中的内容。比如说常用的数据库的配置方式。 
我们的配置信息通常会写在资源文件中,然后通过property-placeholder这种方式去把它加载进来。然后在当前的配置文件中去引用它。比如说这里指定了一种数据源DriverManagerDataSource,然后可以指定这种数据源的url、username和password,它们的来源就是这个资源文件。

以上是使用xml文件配置的方式,那么如果使用注解要怎么做?

@Configuration
@ImportResource("classpath:/com/acme/properties-config.xml")
public class AppConfig{

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource(url,username,password);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
仍然使用@Configuration,把这个类作为一个配置来使用。@ImportResource就是引入一个这种资源,然后资源对应一个xml文件,和前个例子差不多,xml文件也会对应一个property-placeholder。 
用@Value这个注解从资源文件中取出它的key赋值给成员变量,包括username、password等。然后再使用@Bean这个注解去创建DriverManagerDataSource的一个对象,也就是和第一种的方式一样,去创建这个Bean的对象,同时把url、username、password传入DriverManagerDataSource的构造器。 
这样就达到了从资源文件中去加载资源文件的配置,并应用到bean的创建中。

加载资源文件的例子 
创建一个类MyDriverManager,其构造器有三个参数:

public class MyDriverManager {

    public MyDriverManager(String url, String userName, String password) {
        System.out.println("url : " + url);
        System.out.println("userName: " + userName);
        System.out.println("password: " + password);
    }
}
1
2
3
4
5
6
7
8
在前一个例子中的StoreConfig类中加上@ImportResource(“classpath:config.xml”)。

@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {
    //...
}
1
2
3
4
5
然后看一下这个config.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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd" >

    <context:property-placeholder location="classpath:/config.properties"/>

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
里边使用property-placeholder去指定一个资源文件的location,然后看一下这个资源文件的内容。 


之后再看看在StoreConfig类中要如何配置它

@Value("${url}")
private String url;

@Value("${jdbc.username}")
private String username;

@Value("${password}")
private String password;

@Bean
public MyDriverManager myDriverManager() {
    return new MyDriverManager(url, username, password);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
要注意username那里不可以直接写username,这样会取到当前用户的,通常会写为jdbc.username。这个类中首先声明成员变量,然后用@Value注解来得到。之后创建一个Bean:MyDriverManager,然后返回一个MyDriverManager的对象,给构造器传入参数。

单元测试类的写法如下:

@Test
public void testMyDriverManager() {
    MyDriverManager manager = super.getBean("myDriverManager");
    System.out.println(manager.getClass().getName());
}
1
2
3
4
5
大体的写法就是这样。
--------------------- 
作者:流星划过gray 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_36206746/article/details/78136023 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

<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]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值