Ich versuche @Autowired Annotation mit meiner generic Dao-Schnittstelle wie folgt zu verwenden:Frühling 3 DI generische DAO-Schnittstelle
public interface DaoContainer<E extends DomainObject> {
public int numberOfItems();
// Other methods omitted for brevity
}
ich diese Schnittstelle in meinem Controller verwende in folgenden Weise:
@Configurable
public class HelloWorld {
@Autowired
private DaoContainer<Notification> notificationContainer;
@Autowired
private DaoContainer<User> userContainer;
// Implementation omitted for brevity
}
ich habe meinen Anwendungskontext mit folgenden Konfiguration
konfiguriere<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 />
Das funktioniert nur partiall y, da Spring nur eine Instanz meines DaoContainers, nämlich DaoContainer, erstellt und injiziert. Mit anderen Worten, wenn ich userContainer.numberOfItems() frage; Ich erhalte die Anzahl der notificationContainer.numberOfItems()
Ich habe versucht, stark typisierte Schnittstellen zu verwenden, um die korrekte Umsetzung wie folgt zu markieren:
public interface NotificationContainer extends DaoContainer<Notification> { }
public interface UserContainer extends DaoContainer<User> { }
und verwendet dann diese Schnittstellen wie folgt aus:
@Configurable
public class HelloWorld {
@Autowired
private NotificationContainer notificationContainer;
@Autowired
private UserContainer userContainer;
// Implementation omitted...
}
Jetzt
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)}
,:
versagt Leider dies BeanCreationException Ich bin ein wenig verwirrt, wie ich vorgehen soll oder mehrere Dao's sogar möglich benutze. Jede Hilfe würde sehr geschätzt werden :)
Ich sehe keine Implementierungsklassen für Ihre Schnittstellen. Wie viele gibt es und wie sehen sie aus? – skaffman
Ich hatte keine expliziten Implementierungen für die Schnittstellen, da ich gehofft hatte, ich könnte generische Dao-Klasse verwenden (d. H. DaoContainer). Ich könnte explizite Implementierungen erstellen (wie Espen in seiner Antwort darauf hingewiesen hat). Das fühlt sich einfach nicht an, da ich versuche Java-Generika so gut wie möglich zu nutzen. Allerdings habe ich DaoContainerImpl . –
Peders
vielleicht http://stackoverflow.com/questions/502994/spring-ioc-and-generic-interface-type/511417#511417 ist eine Lösung –