У меня есть приложение, состоящее из 2 проектов - пользовательский интерфейс и данные. В проекте данных, я добавил пружинный компонент в контексте приложения XML:Впрыскивание пружинной фасоли - свойства впрыска после того, как bean был определен
<bean id="mail-notification-service" class="com.test.DefaultEmailNotificationManager">
</bean>
Этот менеджер рассылает уведомления по запросу, а также параметры использования простого перечисления и объект а параметры (оба из которых используют классы только в проекте данных), чтобы выбрать IEmailGenerator и использовать его для отправки электронной почты.
Менеджер определяется что-то вроде:
public class DefaultEmailNotificationManager implements IEmailNotificationManager {
public MailResult sendEmail(EmailType type) { .. }
public void register(IEmailGenerator generator) { .. }
}
public interface IEmailGenerator {
public EmailType getType();
}
Беда в том, что генераторы определены в проекте пользовательского интерфейса, так что они могут делать такие вещи, как разжиться классов калитки страниц, цикл запроса и ресурсы приложения , Таким образом, я не могу добавить их в bean-компонент в applicationContext проектов данных, чтобы другие модули как в проектах данных, так и в пользовательском интерфейсе могли их использовать.
Есть ли способ в ApplicationContext проекта пользовательского интерфейса, чтобы сделать что-то вроде:
<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>
можно вручную связать бобы вместе в методе WicketApplication.init, но предпочел бы что-то более элегантное. Кто-нибудь сделал что-нибудь подобное?
Использование пружины 4.1.4
Заранее спасибо.
Привет, спасибо за ваш ответ. Я попробовал, но получил метод NPE в методе init - генераторы не установлены. – fancyplants
Я обновил ответ. Используйте установку на основе сетки поля «генераторы». –
Спасибо, что заработало! Весенние документы говорят только, что это можно сделать здесь: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-autowire - в другом месте они заявляют, что если более чем один бит будет соответствовать, то он потерпит неудачу. Даже в таблице 7.2 в ссылке говорится, что до того, как руководство поправится в абзаце после! – fancyplants