2010-11-26 25 views
1

J'ai reçu une question concernant la liaison et l'annotation.Comment tester l'objet d'annotation dans la classe implémentant AbstractModule

J'ai la classe suivante:

public class MailFacadeImpl implements MailFacade { 

    private final PersonDao personDao; 

    @Inject 
    public MailFacadeImpl(@Mail PersonDao personDao) { 
    super(); 
    this.personDao = personDao; 
    } 

Le PersonDao est annotés avec une annotation personnalisée. J'aimerais pouvoir tester cette annotation dans la classe qui implémente AbstractModule.

ici est un morceau de code:

bind(new TypeLiteral<SecurityRulesFactory<Person>>(){}).toProvider(FactoryProvider.newFactory(
    new TypeLiteral<SecurityRulesFactory<Person>>(){}, new TypeLiteral<MailSecurityRulesCrdb>(){})); 

Je voudrais avoir somthing semblable à:

if(PersonDAO is annotated with(Mail.class)){ 
bind(new TypeLiteral<SecurityRulesFactory<Person>>(){}).toProvider(FactoryProvider.newFactory(
    new TypeLiteral<SecurityRulesFactory<Person>>(){}, new TypeLiteral<MailSecurityRulesCrdb>(){})); 
} 

Pensez-vous qu'il est possible?

merci pour votre aide :-) Passez un bon vendredi!

+0

J'ai trouvé ceci: PersonDao.class.isAnnotationPresent (Mail.class). Peut-être que ça fonctionne. Je vais tester. – AbstractMan

Répondre

0

La raison pour laquelle vous souhaitez que votre module effectue ce test n'est pas claire. Au lieu de cela, votre module peut indiquer comment obtenir ou créer une instance de PersonDao pour les points d'injection annotée avec Mail:

bind(PersonDao.class).annotatedWith(Mail.class).to(EmailAwarePersonDao.class); 

Notez que votre PersonDao.class.isAnnotationPresent(Mail.class) ne va pas aider ici, puisque la classe elle-même PersonDao n'est pas annotées avec Mail ; le paramètre au constructeur MailFacadeImpl a cette annotation. Il existe des moyens de tester cela, mais si vous essayez de le faire à partir d'un module de Guice, vous faites probablement quelque chose de mal.