Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从spring托管bean向侦听器发送事件_Java_Spring - Fatal编程技术网

Java 从spring托管bean向侦听器发送事件

Java 从spring托管bean向侦听器发送事件,java,spring,Java,Spring,我想在我的存储库层中创建一个事件通知程序,以便添加侦听器。我正在使用Spring,我想知道这是否是一种好的方法?还是有更好的方法在Spring中实现通知/侦听器 @Repository public class JdbcRepository { private List<InsertListener> insertListeners; public void insert(final SomeObject object) { // Ommited

我想在我的存储库层中创建一个事件通知程序,以便添加侦听器。我正在使用Spring,我想知道这是否是一种好的方法?还是有更好的方法在Spring中实现通知/侦听器

@Repository
public class JdbcRepository {

    private List<InsertListener> insertListeners;

    public void insert(final SomeObject object) {
        // Ommited code for brewity
        for (InsertListener listener : insertListeners) {
            listener.notifiy(...);
        }
    }
}
@存储库
公共类jdbc存储库{
私有列表插入监听器;
公共空白插入(最终SomeObject){
//brewity的Ommited代码
for(InsertListener侦听器:insertListeners){
监听器。通知(…);
}
}
}
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>

看一看,有些人看。

看一看,有些人看。

你可以这样做

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

    @PostConstruct
    public void init() {
        listeners = context.getBeansOfType(InsertListener.class).values();
    }
...
公共类jdbc存储库{
@自动连线
应用上下文上下文;
收集听众;
@施工后
公共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" />

你可以这样做

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

    @PostConstruct
    public void init() {
        listeners = context.getBeansOfType(InsertListener.class).values();
    }
...
公共类jdbc存储库{
@自动连线
应用上下文上下文;
收集听众;
@施工后
公共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" />


是的,所以我在问题中建议的最底层方法是OK?而仅仅使用注释可能无法做到这一点?很好!因此您可以选择这样做(通过应用程序上下文注入,创建与Spring的更多耦合)还是在XML中配置它?你会怎么做?我会投票给注释,我也不会考虑XML配置,所以我在这个问题中提出的底层方法是OKY的,而且可能没有办法用注释来做这件事吗?很好!所以你可以在这样做之间做出选择。(用应用程序上下文注入来创建更多的耦合到施普灵河)或在XML中配置它?你会怎么做?我会投票支持注释,我也会考虑没有XML配置。