Spring 依赖注入:自动注入properties文件中的配置

在不少状况下咱们须要在配置文件中配置一些属性,而后注入到bean中,Spring提供了org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer类,能够方便咱们使用注解直接注入properties文件中的配置。 java

下面咱们看下具体如何操做: mysql

首先要新建maven项目,并在pom文件中添加spring依赖,以下pom.xml文件: spring

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.outofmemory</groupId> <artifactId>hellospring.properties.annotation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hellospring.properties.annotation</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.springframework-version>3.0.0.RC2</org.springframework-version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> </dependency> </dependencies> </project>

要自动注入properties文件中的配置,须要在spring配置文件中添加org.springframework.beans.factory.config.PropertiesFactoryBean和org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer的实例配置: sql

以下spring配置文件appContext.xml apache

<?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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- bean annotation driven --> <context:annotation-config /> <context:component-scan base-package="cn.outofmemory.hellospring.properties.annotation"> </context:component-scan> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath*:application.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configProperties" /> </bean> </beans>

在这个配置文件中咱们配置了注解扫描,和configProperties实例和propertyConfigurer实例。这样咱们就能够在java类中自动注入配置了,咱们看下java类中如何作: app

package cn.outofmemory.hellospring.properties.annotation; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MySQLConnectionInfo { @Value("#{configProperties['mysql.url']}") private String url; @Value("#{configProperties['mysql.userName']}") private String userName; @Value("#{configProperties['mysql.password']}") private String password; /** * @return the url */ public String getUrl() { return url; } /** * @return the userName */ public String getUserName() { return userName; } /** * @return the password */ public String getPassword() { return password; } }

自动注入须要使用@Value注解,这个注解的格式#{configProperties['mysql.url']}其中configProperties是咱们在appContext.xml中配置的beanId,mysql.url是在properties文件中的配置项。 maven

properties文件的内容以下: 测试

mysql.url=mysql's url mysql.userName=mysqlUser mysql.password=mysqlPassword

最后咱们须要测试一下以上写法是否有问题,以下App.java文件内容: ui

package cn.outofmemory.hellospring.properties.annotation; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Hello world! * */ public class App { public static void main( String[] args ) { ApplicationContext appContext = new ClassPathXmlApplicationContext("appContext.xml"); MySQLConnectionInfo connInfo = appContext.getBean(MySQLConnectionInfo.class); System.out.println(connInfo.getUrl()); System.out.println(connInfo.getUserName()); System.out.println(connInfo.getPassword()); } }

在main方法中首先声明了appContext,而后得到了自动注入的MySQLConnectionInfo的实例,而后打印出来,运行程序会输出配置文件中配置的值。 url

相关文章
相关标签/搜索