Spring Boot中SocketHandler类@Autowired注入报NullPointerException异常
解决SocketHandler中@Autowired注入出现NullPointerException的问题
我一眼就揪出问题根源了——你在WebSocketConfig里手动new SocketHandler()的操作,导致这个SocketHandler实例完全脱离了Spring容器的管理,Spring自然没法给它注入Socket_mesajService,调用时才会抛出NullPointerException。
问题分析
Spring的依赖注入(DI)只对容器创建并管理的Bean生效。你虽然给SocketHandler加了@Component注解,但配置WebSocket时直接手动实例化,这个对象根本不在Spring的控制范围内,@Autowired注解完全不会被处理,所以socket_mesajService字段始终是null。
解决方案
修改WebSocketConfig,让它注入Spring容器管理的SocketHandler实例,而非手动创建:
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { // 注入Spring容器中的SocketHandler Bean @Autowired private SocketHandler socketHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // 使用注入的实例,不要手动new registry.addHandler(socketHandler, "/name"); } }
为什么这样能解决问题?
现在SocketHandler是Spring容器初始化的Bean(你加了@Component,且ApplicationRun的包扫描已经覆盖它所在路径),Spring会自动处理类中的@Autowired注解,把Socket_mesajService的实例注入进去,就和你其他正常工作的类逻辑一致了。
额外确认点(确保万无一失)
- 确认
SocketHandler所在包在ApplicationRun的scanBasePackages范围内(你的配置是com.polipool.*,只要类在这个包下就没问题) - 确认
Socket_mesajServiceImpl已经加了@Service注解,且被Spring扫描到(你已经做到了)
内容的提问来源于stack exchange,提问作者user8202387
相关产品推荐
相关产品推荐

