Я пытаюсь использовать аннотацию @Autowired с моим общим интерфейсом Dao следующим образом:
public interface DaoContainer<E extends DomainObject> {
public int numberOfItems();
// Other methods omitted for brevity
}
Я использую этот интерфейс в моем контроллере следующим образом:
@Configurable
public class HelloWorld {
@Autowired
private DaoContainer<Notification> notificationContainer;
@Autowired
private DaoContainer<User> userContainer;
// Implementation omitted for brevity
}
Я настроил контекст приложения со следующей конфигурацией
<context:spring-configured />
<context:component-scan base-package="com.organization.sample">
<context:exclude-filter expression="org.springframework.stereotype.Controller"
type="annotation" />
</context:component-scan>
<tx:annotation-driven />
Это работает только частично, поскольку Spring создает и внедряет только один экземпляр моего DaoContainer, а именно DaoContainer. Другими словами, если я спрашиваю userContainer.numberOfItems (); Я получаю номер уведомленияContainer.numberOfItems ()
Я пытался использовать строго типизированные интерфейсы, чтобы пометить правильную реализацию следующим образом:
public interface NotificationContainer extends DaoContainer<Notification> { }
public interface UserContainer extends DaoContainer<User> { }
А затем использовал эти интерфейсы так:
@Configurable
public class HelloWorld {
@Autowired
private NotificationContainer notificationContainer;
@Autowired
private UserContainer userContainer;
// Implementation omitted...
}
К сожалению, это не удается BeanCreationException:
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.organization.sample.dao.NotificationContainer com.organization.sample.HelloWorld.notificationContainer; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organization.sample.NotificationContainer] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Теперь, я немного запутался, как мне действовать, или даже возможно использование нескольких Дао. Любая помощь будет принята с благодарностью:)