2012-02-10 9 views
5

Sto sviluppando un'applicazione Spring e mi chiedevo se esiste una parte del framework che mi consente di fare qualcosa di simile in un modo più elegante, come la configurazione di qualcosa in XML?Thread.setDefaultUncaughtExceptionHandler in Spring

+0

In quale contesto? Che problema stai cercando di risolvere? – skaffman

+0

Mi dispiace che avrei dovuto elaborare. In questo caso sto scrivendo un gestore di eccezioni non catturato che scrive la traccia dello stack nel mio file log4j. Mentre sono semplice da implementare, mi chiedevo se esistesse un "modo primaverile" di fare le cose. – mogronalol

risposta

5

Se lo scopo della tua domanda è quello di impostare una consuetudine UncaughtExceptionHandler attraverso il vostro contesto di applicazione, è possibile utilizzare:

<bean id="myhandler" class="java.lang.ThreadGroup"> 
    <constructor-arg value="Test"/> 
</bean> 

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="java.lang.Thread"/> 
    <property name="targetMethod" value="setDefaultUncaughtExceptionHandler"/> 
    <property name="arguments"> 
    <list> 
     <ref bean="myhandler" /> 
    </list> 
    </property> 
</bean> 

(NB sostituire MyHandler con una Thread.UncaughtExceptionHandler di scelta ...)

+1

Questo è il "modo più elegante"? Com'è meglio di farlo in Java? – skaffman

+0

Senza contesto Non ho davvero un'opinione sul fatto che sia elegante o meno, ma posso vedere il ragionamento di fare questo rispetto alla creazione di una classe Java separata solo per impostare il gestore di eccezioni non rilevate all'avvio. – beny23

+0

Penso che questo sia più elegante, poiché l'impostazione del gestore fa parte della configurazione delle applicazioni che si presume che la molla sia sotto controllo. – mogronalol

1

È può anche utilizzare le classi annotate @ControllerAdvice per la gestione delle eccezioni non rilevate. Facendo riferimento a https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc, il seguente codice catturerà qualsiasi eccezione:

@ControllerAdvice 
public class MyUncaughtExceptionHandler { 

    @ExceptionHandler(value = Exception.class) 
    public void defaultExceptionHandler(Exception e) { 
     // do whatever you want with the exception 
    } 
}