2010-11-26 8 views
1

Ich habe eine Frage bezüglich Bindung und Annotation.So testen Sie Annotationsobjekt in der Klasse, die AbstractModule implementieren

Ich habe die folgende Klasse:

public class MailFacadeImpl implements MailFacade { 

    private final PersonDao personDao; 

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

Die PersonDao mit einer benutzerdefinierten Anmerkung kommentiert wird. Ich möchte diese Annotation innerhalb der Klasse, die AbstractModule implementieren, testen können.

hier ist ein Stück Code:

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

Ich möchte somthing ähnlich wie haben:

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

Denken Sie, es ist möglich?

Danke für Ihre Hilfe :-) Einen schönen Freitag!

+0

Ich habe Folgendes gefunden: PersonDao.class.isAnnotationPresent (Mail.class). Vielleicht klappt es. Ich werde testen. – AbstractMan

Antwort

0

Es ist nicht klar, warum Ihr Modul diesen Test durchführen soll. Stattdessen kann das Modul angeben, wie eine Instanz von PersonDao Injektionsstellen mit Mail kommentierte erhalten oder zu erstellen:

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

Beachten Sie, dass Ihre PersonDao.class.isAnnotationPresent(Mail.class) wird hier nicht helfen, da die PersonDao Klasse selbst nicht mit Mail kommentiert wird ; Der Parameter für den MailFacadeImpl Konstruktor hat diese Annotation. Es gibt Möglichkeiten, dies zu testen, aber wenn Sie dies mit einem Guice-Modul versuchen, tun Sie wahrscheinlich etwas falsch.

Verwandte Themen