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

Spring依赖注入:自动注入properties文件中的配置:很多情况下我们需要在配置文件中配置一些属性,然后注入到bean中,Spring提供了org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer类,可以方便我们使用注解直接注入properties文件中的配置。

下面我们看下具体如何操作:

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

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelversion>4.0.0</modelversion>

  <groupid>cn.outofmemory</groupid>

  hellospring.properties.annotation</artifactid>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>

  <name>hellospring.properties.annotation</name>

  <url>https://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>

      junit</artifactid>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>             

    <!-- Spring -->

    <dependency>

        <groupid>org.springframework</groupid>

        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的实例配置:

如下spring配置文件appContext.xml

<!--?xml version="1.0" encoding="UTF-8"?-->

<beans xmlns="https://www.springframework.org/schema/beans" xmlns:context="https://www.springframework.org/schema/context" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://www.springframework.org/schema/beans

 https://www.springframework.org/schema/beans/spring-beans-3.0.xsd

 https://www.springframework.org/schema/context

 https://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 class="org.springframework.beans.factory.config.PropertiesFactoryBean" id="configProperties">

        <property name="locations">

            <list>

                <value>classpath*:application.properties</value>

            </list>

        </property>

    </bean>

    <bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer" id="propertyConfigurer">

        <property name="properties" ref="configProperties">

    </property></bean>   

</context:annotation-config></beans>

在这个配置文件中我们配置了注解扫描,和configProperties实例和propertyConfigurer实例。这样我们就可以在java类中自动注入配置了,我们看下java类中如何做:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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文件中的配置项。

properties文件的内容如下:

1

2

3

mysql.url=mysql's url

mysql.userName=mysqlUser

mysql.password=mysqlPassword

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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的实例,然后打印出来,运行程序会输出配置文件中配置的值。

猜你喜欢

转载自blog.csdn.net/qb170217/article/details/81540721