【发布时间】:2021-08-19 03:03:19
【问题描述】:
目前我正在开发一个小型系统来记录所有未捕获的异常并将它们存储到数据库中以供进一步调试/开发。 为此,我将 UncaughtExceptionHandler 用于特定线程:
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler{
@Autowired
private LoggedExceptionService service;
public GlobalExceptionHandler() {
}
@Override
public void uncaughtException(Thread t, Throwable e) {
System.err.println("IN UNCAUGHTEXCEPTION METHOD");
this.service.saveException(new LoggedException(e));
}
}
正如您所见,service 字段已注入,当我捕获异常时,我会收到 NullPointerException,因为该字段为空。
主要问题是 GlobalExceptionHandler 的使用。如果我使用构造函数注入(如在此代码 sn-p 中):
private LoggedExceptionService service;
@Autowired
public GlobalExceptionHandler(LoggedExceptionService service) {
this.service = service;
}
那么该字段不为空,但是我不能将它声明为异常处理程序,因为我不能将它自动装配到 java-native 方法。电话是:
Thread.setDefaultUncaughtExceptionHandler(new GlobalExceptionHandler());
是否有可能将处理程序自动连接到线程方法,或者有什么好方法?
【问题讨论】:
标签: java spring exception constructor-injection