Автопроводка Неуправляемых Бобов С Аннотацией @Component
Я хочу использовать @AutoWired для внедрения неуправляемого компонента, настроенного с помощью @Component, в управляемый компонент. Я почти уверен, что у меня правильная конфигурация, но по какой-то причине я продолжаю получать исключение:
No unique bean of type [foo.Baz] is defined: Unsatisfied dependency of type [class foo.Baz]: expected at least 1 matching bean
Основываясь на ошибке, я предполагаю, что он не может найти класс Baz, но я не уверен, почему. Насколько я понимаю, элемент context:spring-configed в XML config должен был позволить мне сделать это. Я также позаботился о том, чтобы включить соответствующие файлы jar (весеннее ткачество.Джар и аспек-Ткач.кувшин).
Вот простой пример моей настройки.
Моя XML-конфигурация:
<beans ...>
...
<context:annotation-config/>
<context:spring-configured/>
<context:component-scan base-package="foo"/>
<bean id="bar" class="foo.Bar"/>
...
</beans>
У меня есть один управляемый Боб:
package foo;
public class Bar {
@Autowired
private Baz baz;
public void setBaz(Baz baz) {
this.baz = baz;
}
...
}
И один неуправляемый Боб:
package foo;
@Component
public class Baz {
...
}
Есть ли что-то, что я упускаю?
EDIT : в журнале перечислены бобы, которые он создает, и foo.Баз-не один из них. Я не знаю, почему он не берет аннотированный класс @Component.
3 ответа:
Поскольку Bar настроен с помощью xml, он может быть настроен только с помощью xml. то есть вы не можете смешивать их. Так что аннотацию "@Autowired " на базе не забирают (ни одна из аннотаций не будет). Только когда вы добавляете аннотацию spring на уровне класса, spring будет слушать любые другие аннотации.
Что вам нужно сделать, так это в xml настроить Боб, чтобы он был автоматически подключен по типу, добавить сеттер для этого типа, и вы достигнете желаемого поведение.
<bean id="bar" class="foo.Bar" autowire="byType"/>
Еще одна вещь, когда вы аннотируете боб с @Component, он является пружинным управляемым Бобом. То, что он не создан с помощью xml, не означает, что он неуправляем. Неуправляемый боб-это тот, который вы не получаете от весны.
Бар и баз управляются пружинами. Это механизм, который вы выбрали, чтобы определить их, что отличается.
Предыдущий ответ неверен в одном аспекте. Вы можете автоматически подключать бобы, которые в противном случае настроены с помощью xml.
Из раздела 3.4.5 in http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html:
При использовании метаданных конфигурации на основе XML[2]вы указываете режим autowire для определения bean с атрибутом autowire элемента. Функция автоматического подключения имеет пять режимов. Вы указываете автоэлектропроводка в зернах и таким образом, можно выбрать, какие из них для автоматического подключения.
Вы можете автоматически подключать по имени, типу и конструктору. Есть грубый пример этого здесь: http://www.java2s.com/Code/Java/Spring/AutoWiring.htm