Ввод свойств с помощью Spring & annotation @Value
Я пытаюсь загрузить файл свойств в Spring bean, а затем вставьте этот bean в класс.
Единственная часть, с которой я не могу работать, по-видимому, использует ссылку @Resource. Может кто-нибудь связать последнюю часть для меня? Я получаю нулевое значение каждый раз. Кажется, что не хочет вводить значение.
[EDIT] - Я думал, что использование @Resource было лучшим способом, но предлагаемое решение мне было легче.
Я видел это решение в другом сообщении:
Ссылка для ссылочного решения: Ввести значение свойства в Spring - отправлено DON
Кредит Дону за сообщение, но я просто не был уверен, как закончить его с помощью @Resource.
Результаты отладки:
Значение переменной appProperties
всегда равно нулю. Он не вводится.
Spring Конфигурация.
![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 Конфигурация:
![enter image description here]()
Класс Java:
![enter image description here]()
Ответы
Ответ 1
Для вашего решения для работы вам также потребуется сделать foo Spring bean; потому что иначе как Spring знает, что он должен иметь дело с любыми вашими аннотациями в вашем классе?
- Вы можете указать его в своем appcontext xml как bean с
..class="foo"
- Или используйте
component-scan
и укажите базовый пакет, содержащий ваш класс foo
.
Поскольку я не совсем уверен, что это именно то, что вы хотите (не хотите ли вы, чтобы файл .properties анализировался с помощью Spring и имел ли он пары ключ-значение вместо объекта Properties
?), Я предлагаю вам другое решение: использование пространства имен util
<util:properties id="props" location="classpath:com/foo/bar/props.properties"/>
И ссылайтесь на значения внутри вашего beans (также должны быть Spring):
@Value("#{props.foo}")
public void setFoo(String foo) {
this.foo = foo;
}
EDIT:
понял, что вы импортируете org.springframework.context.ApplicationContext
в свой класс, который, вероятно, не нужен. Я настоятельно рекомендую вам прочитать Spring ссылку, по крайней мере, в первых нескольких главах, потому что a) это замечательно прочитано b) вам будет намного легче понять Spring если основы понятны.
Ответ 2
Еще одно решение, использующее свойства placeholder.
Контекст spring:
<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;
}