我对弹簧自动接线有问题。我有一个实现AsyncUncaughtExceptionHandler的类。
@Component
public class MyExceptionHandler implements AsyncUncaughtExceptionHandler {
@Autowired
MyService myService;
@Override
public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
if (throwable instanceof MyException) {
myService.handleException((MyException) throwable);
} else {
//...
}
}
当代码运行到调用myService的位置时,由于myService为null,将引发Nullpointer。 MyService在其他地方自动接线没有任何问题,只有在AsyncUncaughtExceptionHandler的实现中自动接线才会引起问题。
@Service
public class MyService {
public void handleException(MyException e) {
//...
}
}
我在StackOverflow上遇到了一些问题,该问题解决了类似的问题。这些问题是由代理机制引起的,但是我没有设法使代码正常工作。另外,我不确定这是否是问题所在。
感谢您的帮助。预先感谢。
答案 0 :(得分:0)
您还需要将MyExceptionHandler
标记为bean:
@Component
public class MyExceptionHandler implements AsyncUncaughtExceptionHandler {
答案 1 :(得分:0)
在配置asyncExceptionHandler时,Mistake实际上在我这一边。
必须对此进行更改:
@Configuration
@EnableAsync
@ComponentScan
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new RccAsyncExceptionHandler();
}
}
对此:
@Configuration
@EnableAsync
@ComponentScan
public class AsyncConfiguration implements AsyncConfigurer {
@Autowired
MyExceptionHandler rccAsyncExceptionHandler;
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return rccAsyncExceptionHandler;
}
}
菜鸟的错误,但我很长一段时间都找不到。
答案 2 :(得分:0)
这里发生的事情是,
@ComponentScan
到
查看并初始化新线程)。@ComponentScan
没有处理它?
组件扫描主要是扫描包的子集和
服务可以在不同的包中定义。解决办法:
使用 @ApplicationScope
注释创建服务 bean 应用范围。