Spring (версия 3.1.0) @Значение: автоматическое считывание исключения подключения из конфигурационного xml

#spring #autowired

#spring #автоматически подключенный

Вопрос:

Код содержит следующую ссылку на файл конфигурации в classpath.

 ....
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repository
public class TestTaxes implements TaxIntface {

@Autowired
protected ContxtManager contxtManager;
@Autowired
protected TxEngLoader txEng;
@Value("#{paths}")
List<String> paths;
....
  

config.xml содержит следующую запись

 ....
<?xml version="1.0"?>
<beans xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
<util:properties location="classpath:/eng.properties" id="engProperties"/>
<util:list id="paths" value-type="java.lang.String">
  <value>Calc.drl</value>
  <value>GetTx.drl</value>
</util:list>
</beans>
  

При развертывании приложения я получаю исключение автоматической проводки spring:

 Error creating bean with name 'testTaxes': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.util.List com.x.y.z.TestTaxes.paths;
nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed;
nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'paths' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
  

Любая помощь приветствуется, спасибо!

Комментарии:

1. Почему вы просто не используете @Autowired с @Qualifier или @Resource с именем компонента?

2. @Значение («#{пути}») … часть находится в другом коде продукта, который я не могу изменить. Я расширяю класс TestTaxes в своем коде, и именно здесь происходит сбой при попытке инициализации родительского класса…

3. Я попытался использовать @Scope (значение = «step», proxyMode = ScopedProxyMode. TARGET_CLASS) к созданному мной подклассу, который работал, но затем он застрял в родительском классе TestTaxes…

Ответ №1:

Это потому, что свойства — это карта, а не список. Если вы хотите взять строку из списка свойств файлов, необходимо сделать что-то вроде:

пути.свойства

 value.list.properties=string1,string2,string3
  

В классе java вам нужно сделать следующее:

 public class TestTaxes implements TaxIntface {

@Value("#{paths['value.list.properties']}")
List<String> paths; 
  

Ответ №2:

Я уже нашел решение этой проблемы самостоятельно. Все настройки и конфигурирование были правильными; но в @ImportResource отсутствовала запись, которая была config.xml и в нем был список значений для путей.