Java 无法将服务自动连接到AsyncUncaughtExceptionHandler的实现中
我的弹簧自动接线有问题。我有一个实现AsyncUncaughtExceptionHandler的类Java 无法将服务自动连接到AsyncUncaughtExceptionHandler的实现中,java,spring,asynchronous,exception,autowired,Java,Spring,Asynchronous,Exception,Autowired,我的弹簧自动接线有问题。我有一个实现AsyncUncaughtExceptionHandler的类 @Component public class MyExceptionHandler implements AsyncUncaughtExceptionHandler { @Autowired MyService myService; @Override public void handleUncaughtException(Throwable throwabl
@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时抛出null指针。MyService在其他地方自动连接,没有任何问题,只有AsyncUncaughtExceptionHandler实现中的自动连接似乎会导致问题
@Service
public class MyService {
public void handleException(MyException e) {
//...
}
}
我已经讨论了一些有关StackOverflow的问题,这些问题解决了类似的问题。这些问题是由代理机制引起的,但我没有设法使代码正常工作。此外,我不确定这是否是问题所在
感谢您的帮助。提前感谢。您还需要将
MyExceptionHandler
标记为bean:
@Component
public class MyExceptionHandler implements AsyncUncaughtExceptionHandler {
在配置asyncExceptionHandler时,错误实际上在我这边
@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 {
//...
}
}
必须改变这一点:
@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;
}
}
新手犯了错误,但我很长时间都找不到它。这里发生的是
@ComponentScan
请参阅并初始化新线程)@ComponentScan
没有处理它?
组件扫描主要是扫描包的子集和
服务可以在不同的包中定义使用
@ApplicationScope
注释创建服务bean应用程序范围。您的MyExceptionHandler
a@service
、@组件
或类似内容吗?是的,我忘了提到这一点。我已经更新了问题。在配置MyExceptionHandler
的位置添加代码。我的猜测是您使用了newmyExceptionHandler()
,而不是使用Spring托管实例。我会更新这个问题@组件存在于MyExceptionHandler中