2013-09-09 3 views
1
class ConfigurationDetails { 
    private @Resource String esHostURL; 
    private @Resource int maxMessageCounter; 
    private @Resource String queueName; 
    // Assume : This class has all getter and setter methods and a default constructor 
} 

Другого классаавтоматическое связывание не работает при настройке с помощью XML

public class SpringMessageListener implements MessageListener { 
    @Resource ConfigurationDetails configDetails; // With getter and setter method for this 
............ 
.......... 

И в моем XML

<bean id="aListener" class="com.vzw.es.cosumer.SpringMessageListener" autowire="byName"/> 
<bean id="configDetails" class="com.vzw.es.pojo.ConfigurationDetails" autowire="byName"> 
    <property name="esHostURL" value="http://obsgracstg-db0.odc.vzwcorp.com:9200"/> 
    <property name="maxMessageCounter" value="500"/> 
    <property name="queueName" value="ES_queue"/> 
</bean> 

Теперь боб с идентификатором configDetails не получает autowired значения, когда я отладка коды и см. configDetails в классе SpringMessageListerner, он показывает null. Но когда я явно делаю appContext.getBean («configDetails»), он дает мне null-объект. Любая идея, почему Autowiring здесь не работает. Я что-то пропустил здесь. Весенние мастера ценят ваш быстрый ответ.

+0

Покажите нам свое «компонентное сканирование». –

+0

У меня нет элемента компонента-проверки в моем XML –

+0

Добавление моего всего XML здесь –

ответ

2

Весна, по умолчанию, не ищет @Autowired, @Resource, или @Inject аннотации для автообучения ваших бобов. Вы должны сказать ему, чтобы искать их с

<context:component-scan base-package="com.yourpackage.some" /> 
// or, in this case, <context:annotation-config /> 

с этим, весна будет сканировать классы в пакете и впрыснуть бобы, для которых @Autowired или @Resource существует.

Не забудьте добавить объявление пространства имен

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

Что еще более важно

class ConfigurationDetails { 
    private @Resource String esHostURL; 
    private @Resource int maxMessageCounter; 
    private @Resource String queueName; 
    // Assume : This class has all getter and setter methods and a default constructor 
} 

Хотя вы можете autowire String и int типов, это, как правило, считается плохой практикой. Вместо этого удалите аннотацию @Resource и добавьте геттеры и сеттеры для каждого из полей.

Элемент property в объявлении <bean> заботится об установке этих полей.

+0

Позвольте мне попробовать с этим –

+0

Теперь он дает мне исключение: ошибка при создании bean-компонента с именем «configDetails»: не удалось выполнить инъекцию зависимостей ресурсов; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: никакой определяющий компонент типа [java.lang.String], найденный для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. –

+0

@JavaCoder Хорошо, у нас есть прогресс. Удалите аннотации '@ Resource' в полях« ConfigurationDetails »и добавьте геттеры/сеттеры для каждого из них. –

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