Ich habe eine Anwendung bestehend aus 2 Projekten - UI und Daten. In dem Data-Projekt habe ich eine Feder Bohne in den XML-Anwendungskontext hinzugefügt:Spring Bean Injektion - inject Eigenschaften nach Bean wurde definiert
<bean id="mail-notification-service" class="com.test.DefaultEmailNotificationManager">
</bean>
Dieser Manager-Benachrichtigungen auf Anfrage sendet, und die Parameter verwenden, um eine einfache Enum und ein Parameter-Objekt (von denen beiden Klassen verwenden nur im Datenprojekt) einen IEmailGenerator auszuwählen und damit die E-Mails zu versenden.
Der Manager definiert ist so etwas wie:
public class DefaultEmailNotificationManager implements IEmailNotificationManager {
public MailResult sendEmail(EmailType type) { .. }
public void register(IEmailGenerator generator) { .. }
}
public interface IEmailGenerator {
public EmailType getType();
}
Das Problem ist, werden die Generatoren im UI-Projekt definiert ist, so können sie halten, Wicket Seite Klassen bekommen Dinge wie, den Anforderungszyklus und Anwendungsressourcen . Daher kann ich sie nicht zur Bean im ApplicationContext der Datenprojekte hinzufügen, so dass andere Module in den Daten- und UI-Projekten sie verwenden können.
Gibt es eine Möglichkeit in der application des UI-Projektes wie etwas zu tun:
<bean id="exclusionNotifier" class="com.test.ui.ExclusionEmailNotifier"/>
<bean id="modificationNotifier" class="com.test.ui.ModificationEmailNotifier"/>
<call-method bean-ref="mail-notification-service" method="register">
<param name="generatorImplementation", ref="exclusionNotifier"/>
</call-method>
<call-method bean-ref="mail-notification-service" method="register">
<param name="generatorImplementation", ref="modificationNotifier"/>
</call-method>
kann ich manuell die Bohnen zusammen in der WicketApplication.init Methode binden würde aber etwas elegantere bevorzugen. Hat jemand so etwas getan?
Verwenden von Feder 4.1.4
Vielen Dank im Voraus.
Hallo, danke für deine Antwort. Ich habe es versucht, aber eine NPE in der init-Methode bekommen - die Generatoren sind nicht gesetzt. – fancyplants
Ich habe die Antwort aktualisiert. Verwenden Sie die setzerbasierte Injektion des Felds Generatoren. –
Danke, das hat es funktioniert! Die Spring-Dokumentation sagt nur, dass dies hier getan werden kann: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-autowire - woanders sagen sie, dass wenn mehr als eine Bean passt, dann wird es fehlschlagen. Auch Tabelle 7.2 im Link sagt, dass sich vorher der Guide im Absatz danach korrigiert! – fancyplants