Регистрация исключений во время внедрения бина - PullRequest
0 голосов
/ 20 марта 2010

Я думаю, что это довольно простой вопрос, но после поиска в Google я не могу найти ответ.

Мне нужен способ для регистрации некоторого пользовательского вывода с помощью log4j во время создания bean-компонента Spring.У меня есть фабричный класс с именем ResponderFactory (который используется в качестве фабрики экземпляров в Spring) с фабричным методом, который может генерировать 2 различных типа исключений.

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

Теперь обычно я могу обернуть вызовэтот метод в блоке try-catch с двумя предложениями 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.Прямо сейчас я имею дело с CollectorConsumer, когда я создаю экземпляр, используя new CollectorResponder(...).

Можно ли как-нибудь это сделать?

1 Ответ

0 голосов
/ 20 марта 2010

Я думаю, вам нужно будет передать потребителю другой тип (при условии, что вы хотите регистрировать ошибки в конструкторе CollectorConsumer), который является оберткой вокруг фактической конструкции объекта collectorResponder. то есть содержит такой метод, как

CollectorResponder create() throws whatever

, который вызывается вашим конструктором-потребителем. Этот объект-обертка будет невероятно похож на ваш заводской код, но не будет понят весной. В противном случае эти исключения произойдут до того, как код вашего потребительского конструктора запустится, несмотря ни на что. Spring не сможет внедрять исключения, а прокси вокруг невероятно ленивого объекта создания вряд ли будут работать без какого-либо вызова метода.

Я предполагаю, что вы не просто хотите регистрировать исключения в фабрике отклика.

...