我认为这是一个非常基本的问题,但谷歌搜索后似乎无法找到答案。
我需要的是一种在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(...)
。
我有什么方法可以做到这一点吗?
答案 0 :(得分:0)
我认为您需要向使用者传递不同的类型(假设您想在CollectorConsumer的构造函数中记录错误),这是collectResponder对象的实际构造的包装。即包含类似
的方法CollectorResponder create() throws whatever
由您的使用者构造函数调用。这个包装器对象与您的工厂代码非常相似,但春天不会理解。否则,这些异常将在您的消费者构造函数代码运行之前发生,无论如何。 Spring无法注入异常,如果没有某种方法调用,围绕一个非常懒惰的创建对象的代理就不可能工作。
我假设您不只是想在responderFactory中记录异常。