在bean注入期间记录异常

时间:2010-03-20 17:38:31

标签: java spring logging dependency-injection java-ee

我认为这是一个非常基本的问题,但谷歌搜索后似乎无法找到答案。

我需要的是一种在Spring bean构建期间使用log4j记录一些自定义输出的方法。我有一个名为ResponderFactory的工厂类(在Spring中用作实例工厂),其工厂方法可以抛出2种不同类型的异常。

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

现在,通常我可以在带有2个catch子句的try-catch块中包装对此方法的调用,以处理每个异常的日志记录情况。但是,如果我使用Spring将使用工厂创建的CollectorResponder注入另一个类,我看不出这是怎么回事。

<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 bean时捕获这些异常。现在,当我使用CollectorConsumer实例化时,我正在处理new CollectorResponder(...)

我有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要向使用者传递不同的类型(假设您想在CollectorConsumer的构造函数中记录错误),这是collectResponder对象的实际构造的包装。即包含类似

的方法
CollectorResponder create() throws whatever

由您的使用者构造函数调用。这个包装器对象与您的工厂代码非常相似,但春天不会理解。否则,这些异常将在您的消费者构造函数代码运行之前发生,无论如何。 Spring无法注入异常,如果没有某种方法调用,围绕一个非常懒惰的创建对象的代理就不可能工作。

我假设您不只是想在responderFactory中记录异常。