【问题标题】:Logging exceptions during bean injection在 bean 注入期间记录异常
【发布时间】:2011-01-29 20:30:17
【问题描述】:

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

我需要的是一种在 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 时捕获这些异常。现在,当我使用new CollectorResponder(...) 进行实例化时,我正在处理的是CollectorConsumer

有什么办法可以做到吗?

【问题讨论】:

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


    【解决方案1】:

    我认为您将需要将不同的类型传递给消费者(假设您想在 CollectorConsumer 的构造函数中记录错误),这是对 collectorResponder 对象实际构造的包装。即包含像

    这样的方法
    CollectorResponder create() throws whatever
    

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

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

    【讨论】:

    • 当然,在发布这个问题之后,我意识到在工厂本身中记录异常是很愚蠢的,这就是我最终所做的。感谢您的回复!
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多