代码之家  ›  专栏  ›  技术社区  ›  Marc W

在bean注入期间记录异常

  •  0
  • Marc W  · 技术社区  · 15 年前

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

    我需要的是在SpringBean构造期间用log4j记录一些自定义输出的方法。我有一个叫工厂的班级 ResponderFactory (在Spring中用作实例工厂)使用可以引发两种不同类型异常的工厂方法。

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

    现在,通常我可以在一个带有2个catch子句的try catch块中包装对此方法的调用,以处理每个异常的日志记录情况。但是,如果我用弹簧来注射这个 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 回复  |  直到 15 年前
        1
  •  0
  •   DaveC    15 年前

    我认为您需要将一个不同的类型传递给使用者(假设您希望在collectorconsumer的构造函数中记录错误),这是围绕collectorresponder对象的实际构造的包装器。也就是说,包含类似

    CollectorResponder create() throws whatever
    

    它由您的使用者构造函数调用。这个包装器对象与您的工厂代码非常相似,但是Spring不能理解它。否则,这些异常将在使用者构造函数代码运行之前发生,不管发生什么。Spring将无法注入异常,并且如果没有某种方法调用,一个极其懒惰的创建对象周围的代理就不可能工作。

    我假设您不只是想将异常记录在响应工厂中。