2013-03-21 77 views
1

我想在我的Repository层中创建一个事件通知器,以便我可以添加侦听器。我正在使用Spring,我想知道这是否是一种可行的方法?还是有更好的方法来实现Spring中的通知/侦听器?从弹簧托管bean向听众发送事件

@Repository 
public class JdbcRepository { 

    private List<InsertListener> insertListeners; 

    public void insert(final SomeObject object) { 
     // Ommited code for brewity 
     for (InsertListener listener : insertListeners) { 
      listener.notifiy(...); 
     } 
    } 
} 

Spring配置XML

<bean id="jdbcRepository" class="mypackage.JdbcRepository"> 
    <property> 
     <bean ref="myRepositoryListeners" /> 
    </property> 
</bean> 

<bean id="myRepositoryListeners" class="java.util.List"> 
    <constructor-arg> 
    <list> 
     <ref bean="..." /> 
     <ref bean="..." /> 
    </list> 
    </constructor-arg> 
</bean> 

回答

1

你能做到这样

public class JdbcRepository { 
    @Autowired 
    ApplicationContext context; 
    Collection<InsertListener> listeners; 

    @PostConstruct 
    public void init() { 
     listeners = context.getBeansOfType(InsertListener.class).values(); 
    } 
... 

的context.xml

<context:annotation-config /> 
<bean id="l1" class="InsertListener" /> 
<bean id="l2" class="InsertListener" /> 
<bean id="repo" class="JdbcRepository" /> 
+0

对,所以我的问题是建议的好办法底部?而只有注释可能没有办法做到这一点? – LuckyLuke 2013-03-21 11:32:14

+0

啊,终于明白了你的意思,看到我的回答 – 2013-03-21 11:59:22

+0

不错!所以你可以选择这样做(创建一个更多的耦合到Spring,与应用程序上下文注入)或配置它在XML?你会怎么做? – LuckyLuke 2013-03-21 12:28:35