2013-05-28 4 views
0

Я создаю компонент с аннотациями.Невозможно ввести список массивов как зависимость

@Component 
public class MyClass 
{ 

    @Autowired 
    private ArrayList<String> myFriends= new ArrayList<String>(); 

    //Getters and setters 

} 

Я получаю следующее исключение

Не удалось autowire поле: частные java.util.ArrayList com.mypackage.MyClass.myFriends; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: не найдено подходящего компонента типа [java.util.ArrayList], найденного для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}

Я также попытался с этим

@Resource 
    private ArrayList<String> myFriends= new ArrayList<String>(); 

Я получаю следующее исключение

Не существует подходящего компонента типа [java.util.ArrayList], найденного для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Зависимость от аннотаций: {@ javax.annotation.Resource (разделяемые = верно, mappedName =, описание =, имя = тип = класс java.lang.Object, AuthenticationType = КОНТЕЙНЕР)}

Пожалуйста, дайте мне знать, как исправить это.

+0

Вы понимаете, что вы пытаетесь сделать, верно? –

+0

@LuiggiMendoza. Я пытаюсь создать bean-компонент со свойством как List – Patan

+1

Что вы ожидаете получить? – gkamal

ответ

2

В файле XML вам необходимо определить список.

В файле XML содержится пространство имен util и добавлено следующее определение bean-компонента.

<util:list id="myFriends"> 
<value>string1</value> 
<value>string2</value> 
<value>string3</value> 
</util:list> 

Вы должны изменить тип переменной List<String> вместо ArrayList<String>. Это облегчит внедрение, а также улучшит практику кодирования. Вам нужно добавить аннотацию «Квалификатор», чтобы указать идентификатор компонента, который должен быть введен, квалификатор может не потребоваться, если у вас есть только один такой список.

@Component 
public class MyClass { 
    @Autowired 
    @Qualifier("myFriends") 
    private List<String> myFriends= new ArrayList<String>(); 
    //Getters and setters 
} 

Ссылка на весеннюю справочную документацию для Util: список http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-util-list

+0

Хотя вы здесь, это действительно не реальное использование '@ Autowired' в реальном мире. Обратите внимание, что даже при вводе списка вы назначаете ему новое значение = \. –

+1

Для этой цели был создан список util:. Могут быть случаи, когда мне нужно будет ввести список vlaues (например, список серверов ips). Также рекомендуется всегда инициализировать любую ссылку списка на пустой список. Таким образом, если объект используется в не весеннем контексте (модульный тест, например,), он будет работать корректно, вместо того, чтобы выбрасывать исключение нулевого указателя (шаблон NullObject). – gkamal

+0

Если вы уже используете Spring, вы можете (и я готов поспорить, что вы это сделаете), используя SpringJUnit4ClassRunner, чтобы получить всю мощь от Spring. IMO, у меня будет список значений в другом файле свойств, а не в spring.xml для целей распространения. Взяв ваш пример, у меня будет список серверов ips для стадии разработки и совершенно другой для qa и этапов производства, поэтому вместо 3 конфигурационных файлов spring.xml я бы предпочел иметь 3 разных конфигурационных среды с соответствующими конфигурационными файлами и их соответствующие значения :). –

Смежные вопросы