2013-03-21 4 views
1

리스너를 추가 할 수 있도록 내 리포지토리 계층에 이벤트 알림을 만들고 싶습니다. 나는 봄을 사용하고 있는데, 이렇게하는 것이 좋은지 궁금하다. 아니면 봄에 알림/청취자를 구현하는 더 좋은 방법이 있습니까?봄 관리 빈에서 리스너로 이벤트 방출

@Repository 
public class JdbcRepository { 

    private List<InsertListener> insertListeners; 

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

봄 구성 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

+0

아, 마침내 내 대답을 참조하십시오 –

+0

니스! 그래서 당신은 이것을 (App 컨텍스트 주입과 함께 Spring에 좀 더 결합하여 생성하는 것) 선택하거나 XML에서 구성 할 수 있습니까? 너는 무엇을 할 것이냐? – LuckyLuke

관련 문제