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

相關文章
相關標籤/搜索