Внедрение свойств с помощью Spring и аннотации @Value - PullRequest
12 голосов
/ 21 июня 2011

Я пытаюсь загрузить файл свойств в bean-компонент Spring и затем внедрить этот bean-компонент в класс.

Похоже, единственная часть, которую я не могу получить, - это использование ресурса @. ссылка. Кто-нибудь может подключить последний кусок для меня?Я получаю нулевое значение каждый раз.Кажется, не нужно вводить значение.

[EDIT] - я изначально думал, что использование @ Resource было лучшим способом, но предлагаемое решение я нашел проще.

Я видел это решение в другом посте:

Ссылка на справочное решение: Добавление значения свойства в Spring - опубликовано DON

Благодарю Дона за сообщение, но я просто не знал, как его закончить с помощью @Resource.

Результаты отладки: Значение переменной appPropertiesвсегда ноль.Не вводится.

Spring Config. enter image description here

Образец класса:

package test;

import java.util.Properties;
import javax.annotation.Resource;


public class foo {
    public foo() {}
    @Resource private java.util.Properties appProperties;
}

Основано на рекомендациях в утвержденном решении ниже,Вот изменения, которые я сделал.


Обновление решения:

Spring Config: enter image description here

Класс Java: enter image description here

Ответы [ 2 ]

17 голосов
/ 21 июня 2011

Чтобы ваше решение работало, вам также нужно сделать foo управляемым компонентом Spring;потому что иначе как бы Spring узнал, что он имеет дело с любыми вашими аннотациями в вашем классе?

  • Вы можете указать это в своем appcontext xml как компонент с ..class="foo"
  • Или используйте component-scan и укажите базовый пакет, который содержит ваш foo класс.

Поскольку я не совсем уверен, что это именно то, что вы хотите (разве вы не хотите .properties файл должен быть проанализирован Spring и иметь доступными пары ключей / значений вместо Properties объекта?), Я предлагаю вам другое решение: использование пространства имен util

<util:properties id="props" location="classpath:com/foo/bar/props.properties"/>

И ссылаться на значения внутри ваших bean-компонентов (также они должны управляться Spring):

@Value("#{props.foo}")
public void setFoo(String foo) {
    this.foo = foo;
}

EDIT:

только что понял, что вы импортируете org.springframework.context.ApplicationContext в свой класс, которыйвероятно, не нужно.Я настоятельно рекомендую вам прочитать справочник по Spring хотя бы в первых нескольких главах, потому что a) это отличное чтение b) вам будет намного легче понять Spring, если основы понятны.

3 голосов
/ 07 июля 2013

Еще одно решение, использующее свойства-заполнитель.

Контекст весны:

<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.1.xsd 
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="your.packege" />

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

</beans>

Java-класс, в который вы хотите вставить значения свойств:

public class ClassWithInjectedProperty {

    @Value("${props.foo}")
    private String foo;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...