Le printemps 3 DI de l'utilisation de générique interface DAO

Je suis en train d'utiliser @Autocâblés annotation avec mon générique Dao interface comme ceci:

public interface DaoContainer<E extends DomainObject> {
    public int numberOfItems();
    //Other methods omitted for brevity 
}

- Je utiliser cette interface dans mon Contrôleur en suivant la mode:

@Configurable
public class HelloWorld {
    @Autowired
    private DaoContainer<Notification> notificationContainer;

    @Autowired
    private DaoContainer<User> userContainer;

    //Implementation omitted for brevity
}

J'ai configuré mon contexte de l'application avec la configuration suivante

<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 />

Cela ne fonctionne que partiellement, depuis le Printemps crée et injecte une seule instance de mon DaoContainer, à savoir DaoContainer. En d'autres termes, si je demande à userContainer.numberOfItems(); j'obtiens le nombre de notificationContainer.numberOfItems()

J'ai essayé d'utiliser fortement typé interfaces pour marquer la mise en œuvre correcte comme ceci:

public interface NotificationContainer extends DaoContainer<Notification> { }
public interface UserContainer extends DaoContainer<User> { }

Et ensuite utilisé ces interfaces comme ceci:

@Configurable
public class HelloWorld {
    @Autowired
    private NotificationContainer notificationContainer;
    @Autowired
    private UserContainer userContainer;
    //Implementation omitted...
}

Malheureusement, ce ne 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)}

Maintenant, je suis un peu confus comment dois-je procéder ou à l'aide de plusieurs Dao est encore possible. Toute aide serait grandement appréciée 🙂

  • Je ne vois pas la mise en œuvre des classes pour vos interfaces. Combien sont-ils et que font-ils ressembler?
  • Je n'avais pas explicite des implémentations pour les interfaces, car j'espérais que je pourrais utiliser générique de la classe dao (c'est à dire DaoContainer<E s'étend DomainObject>). J'ai pu créer explicite implémentations (comme Espen a souligné dans sa réponse). Qui ne semble pas raisonnable, étant donné que je suis en train de prendre avantage de Java génériques autant que possible. Cependant, j'ai DaoContainerImpl<E s'étend DomainObject>.
  • peut-être que stackoverflow.com/questions/502994/... c'est une solution
InformationsquelleAutor Peders | 2010-05-17