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
risposta
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 ...)
Questo è il "modo più elegante"? Com'è meglio di farlo in Java? – skaffman
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
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
È 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
}
}
In quale contesto? Che problema stai cercando di risolvere? – skaffman
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