Spring入门(基于Java的容器注解之@ImportResource和@Value)
来源:互联网 发布:手机淘宝怎么看评价 编辑:程序博客网 时间:2024/05/22 05:22
如何使用@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>
这个使用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); }}
仍然使用@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); }}
在前一个例子中的StoreConfig类中加上@ImportResource(“classpath:config.xml”)。
@Configuration@ImportResource("classpath:config.xml")public class StoreConfig { //...}
然后看一下这个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>
里边使用property-placeholder去指定一个资源文件的location,然后看一下这个资源文件的内容。
之后再看看在StoreConfig类中要如何配置它
@Value("${url}")private String url;@Value("${jdbc.username}")private String username;@Value("${password}")private String password;@Beanpublic MyDriverManager myDriverManager() { return new MyDriverManager(url, username, password);}
要注意username那里不可以直接写username,这样会取到当前用户的,通常会写为jdbc.username。这个类中首先声明成员变量,然后用@Value注解来得到。之后创建一个Bean:MyDriverManager,然后返回一个MyDriverManager的对象,给构造器传入参数。
单元测试类的写法如下:
@Testpublic void testMyDriverManager() { MyDriverManager manager = super.getBean("myDriverManager"); System.out.println(manager.getClass().getName());}
大体的写法就是这样。
- Spring入门(基于Java的容器注解之@ImportResource和@Value)
- Spring入门——Spring Bean装配之基于Java的容器注解说明@ImportResource和@Value
- Spring Bean装配之基于Java的容器注解说明——@ImportResource和@Value
- Spring Bean装配--基于java容器的注解说明@ImportResource和@Value
- 基于java容器注解说明---@Value和@ImportResource
- Spring入门(基于Java的容器注解之@Bean)
- Spring入门(基于Java的容器注解之@Scope和基于泛型的自动装配)
- Spring入门——基于Java的容器注解说明之@bean
- 码农小汪-spring框架学习之9-基于 Java 的配置元数据 @ImportResource
- 《Spring实战》学习笔记(二)JavaConfig @Import 和 @ImportResource注解的使用
- Spring Bean装配之基于Java的容器注解说明——@Bean和@Scope
- Spring之基于注解的容器配置
- Spring学习笔记(12.基于java的容器注解)
- JavaConfig @Import 和 @ImportResource注解的使用
- Spring中@ImportResource和@Value加载资源文件
- Spring Bean装配之基于Java的容器注解说明——@Bean
- spring中基于java的容器注解(11)
- spring中基于java的容器注解(12)
- antlr-2.7.6.jar 包问题
- 视频监控安防平台-国标28181 2016-GB28181 2016版检测经历 (平台上联和下联检测)
- 好未来面试问题整理
- 身边最牛逼的程序员是不是都是这个样子的?
- Android 外边框
- Spring入门(基于Java的容器注解之@ImportResource和@Value)
- Log4j使用(一):每天生成一个日志文件DailyRollingFileAppender的使用
- 当鼠标拖曳事件碰到iframe(卡死了)
- Javaweb多次调用Rengine re=new Rengine(args, false, new TextConsole()); 报错
- 用TP5 写了一个 字段追加内容的代码
- 置换和轮换(新姿势,摘自黑书)
- 51nod 1686 第K大区间(二分 尺取)
- Java8 Stream 流中的匹配查找方法
- std::ios::sync_with_stdio(false); cin.tie(0);