Автопроводка и настройка аннотаций в Spring - PullRequest
4 голосов
/ 11 августа 2011

У меня есть 2 компонента A и B. A зависит от B. Я написал что-то вроде:

public class A {
    private B b;
    @Autowired
    public void setB(B b) {
        this.b = b;
    }
}

@Component
public class B {}

new XmlBeanFactory(new FileSystemResource("./spring.xml")).getBean(A.class);

config

<context:annotation-config/>
<context:component-scan
    base-package="com">
</context:component-scan>

<bean class="com.A" autowire="byType" />

Это сработало на отлично. Теперь я хочу настроить A также с помощью аннотаций. Поэтому я добавляю аннотацию @Component к A

@Component
public class A {
    private B b;
    @Autowired
    public void setB(B b) {
        this.b = b;
    }
}

И убрал A описание из конфигурации. Так что это просто

<context:annotation-config/>
<context:component-scan
    base-package="com">
</context:component-scan>

Но Б больше не вводит. Вероятно, я должен указать тип автопроводки или smt как этот. Так как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Вы должны использовать ApplicationContext вместо простого BeanFactory. Похоже, BeanFactory не запускает постпроцессоры, включая тот, который ищет аннотацию @Autowired. Я постараюсь найти документацию для этого, а пока попробуйте:

new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class);

BTW @Autowired полностью допустимо для сеттеров, конструкторов, полей и т. Д. ( source ):

Помечает конструктор, поле, метод сеттера или метод конфигурации как автоматически подключаемые средствами Spring для внедрения зависимостей.

0 голосов
/ 11 августа 2011

Я думаю, вы должны попробовать

@Component
public class A {
    @Autowired
    private B b;
    }
}

@Component
public class B {}

Вы можете обратиться к примеру по ссылке ниже: http://www.roseindia.net/tutorial/spring/spring3/ioc/autoscanig.html

...