2010-03-20 4 views
0

이것은 꽤 기본적인 질문이라고 생각하지만 주위를 인터넷 검색 한 결과 대답을 찾을 수없는 것 같습니다.빈 주입 동안 예외 로깅

내가 필요로하는 것은 Spring bean 구축 중에 log4j로 사용자 정의 출력을 로그하는 방법이다. 두 가지 다른 유형의 예외를 throw 할 수있는 팩터 리 메서드로 ResponderFactory (스프링의 인스턴스 팩토리로 사용됨)이라는 팩토리 클래스가 있습니다.

public CollectorResponder collectorResponder(String inputQueueName) throws ConfigurationException, BrokerConnectionException {} 

지금, 일반적으로 나는 예외 각각에 대한 로깅 상황을 처리하기 위해 2 개 캐치 조항으로 시도-catch 블록이 메소드에 대한 호출을 래핑 할 수있다. 그러나 공장에서 생성 된 CollectorResponder을 삽입하기 위해 Spring을 사용하는 경우 다른 클래스에 어떻게 이것이 가능하지 않은지 알 수 없습니다.

<bean id="responderFactory" class="com.package.ResponderFactory"> 
    <constructor-arg index="0" ref="basicDispatcher" /> 
    <constructor-arg index="1" value="http://localhost:9000" /> 
</bean> 

<bean id="collectorResponder" 
     class="com.package.CollectorResponder" 
     factory-bean="responderFactory" factory-method="collectorResponder"> 
    <constructor-arg value="collector.in" /> 
</bean> 

<bean id="collectorConsumer" class="com.package.CollectorConsumer"> 
    <constructor-arg ref="collectorResponder" /> 
</bean> 

는 다시, 나는 collectorResponder 빈을 인스턴스화 될 때 이러한 예외를 잡으려면. 지금은 new CollectorResponder(...)을 사용하여 인스턴스화 할 때 CollectorConsumer을 처리하고 있습니다.

내가 할 수있는 방법이 있습니까?

답변

0

나는 collectorResponder 객체의 실제 생성을 둘러싼 래퍼 인 CollectorConsumer의 생성자에서 오류를 기록하려고한다고 가정하고 소비자에게 다른 유형을 전달해야한다고 생각한다. 즉 소비자 생성자가 호출하는

CollectorResponder create() throws whatever 

과 같은 메서드가 포함되어 있습니다. 이 래퍼 객체는 공장 코드와 엄청나게 유사하지만 봄에 이해되지는 않습니다. 그렇지 않으면 소비자 생성자 코드가 무엇이든지간에 실행되기 전에 이러한 예외가 발생할 것입니다. Spring은 예외를 삽입 할 수 없으며, 믿을 수 없을만큼 게으른 생성 객체 주위의 프록시는 일종의 메소드 호출 없이는 작동하지 않을 것입니다.

나는 responderFactory에 예외를 기록하기를 원하지 않는다고 가정하고 있습니다.

+0

물론이 질문을 게시 한 직후 공장에서 예외 사항을 기록하는 것이 어리석은 일이 아니라는 것을 깨달았습니다. 응답 주셔서 감사합니다! –