一次SpringBoot AutoWired 注入服务为null的事件

在SpringBoot应用中使用WebSocket时遇到Service自动注入为null的问题。解决方案包括将注入的Service声明为static,以解决Spring单例与WebSocket多实例之间的冲突。问题的根本原因是Spring管理的bean为单例,而每个WebSocket连接对应一个新对象,导致非静态的Service无法多次注入。
摘要由CSDN通过智能技术生成

 

问题表述:

java.lang.NullPointerException
	at com.ynd.back.socket.WebSocket.onMessage(WebSocket.java:113)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:80)
	at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:395)
	at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:119)
	at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:495)
	at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:294)
	at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
	at 
### 回答1: 当Spring Boot依赖注入null时,可能是以下原因之一: 1. 没有正确配置依赖注入:确保在类中正确使用@Autowired或@Inject注释,并且已经在应用程序上下文中正确配置了bean。 2. 依赖项未正确初始化:如果依赖项是通过构造函数注入的,请确保构造函数已正确实现,并且依赖项已正确初始化。 3. 依赖项的作用域不正确:如果依赖项的作用域不正确,则可能会导致依赖项为null。确保依赖项的作用域与应用程序的要求相匹配。 4. 依赖项的名称不正确:如果依赖项的名称不正确,则可能会导致依赖项为null。确保依赖项的名称与应用程序的要求相匹配。 如果您遇到Spring Boot依赖注入null的问题,请检查上述原因,并尝试解决问题。 ### 回答2: SpringBoot依赖注入null的问题可能是由以下几种情况引起的: 1. 未添加注解或注解错误 在使用依赖注入时,应该使用相应的注解,如@Autowire、@Resource、@Inject等,以告诉SpringBoot需要注入哪些依赖。如果没有添加注解或注解错误,SpringBoot会无法正确地进行依赖注入,导致注入的实例为null。 2. 属性名与注入的bean不一致 在使用依赖注入时,应该确保属性名与注入的bean的名称一致,否则SpringBoot也无法正确地进行依赖注入,导致注入的实例为null。例如,如果一个bean的名称为userService,那么注入该bean的属性也应该命名为userService。 3. 对应的bean未被扫描到 如果使用了基于注解的依赖注入,需要确保对应的bean已被正确扫描到。如果未能扫描到对应的bean,SpringBoot无法正确进行依赖注入,导致注入的实例为null。 4. Bean的作用域不正确 在SpringBoot中,Bean有不同的作用域,包括Singleton、Prototype、Request、Session等。如果使用了错误的作用域,也可能导致依赖注入失败,注入的实例为null。 总之,当出现SpringBoot依赖注入null的问题时,需要检查以上几个方面是否出现了错误,以确保依赖注入能够正确进行。同时,需要确保代码规范清晰,注解正确,并且使用正确的作用域,以保证依赖注入能够正常运行。 ### 回答3: 在使用SpringBoot进行依赖注入时,出现依赖注入null的情况通常是因为以下原因: 1. 没有在类上添加@Component或其他注解 SpringBoot依赖注入需要在类上添加相应的注解(如@Controller、@Service、@Repository等)。如果没有添加注解,SpringBoot就无法识别该类为一个需要注入依赖的组件,从而无法完成依赖注入。因此,需要确保在类上添加了正确的注解。 2. 没有在属性上添加@Autowired注解 在依赖注入需要注入的属性时,需要在属性上使用@Autowired注解。该注解会告诉SpringBoot需要自动注入一个对应的Bean。如果没有添加@Autowired注解,则无法完成依赖注入。 3. Bean的命名问题 在SpringBoot中,如果有多个Bean的类型相同,则需要使用@Qualifier来指定需要注入的Bean的名称。如果没有指定正确的Bean名称,依赖注入也会失败。 4. 属性类型与Bean类型不匹配 在进行依赖注入时,需要确保属性类型与需要注入的Bean类型一致。如果类型不一致,则依赖注入也会失败。 5. Bean未被正确创建 如果Bean未被正确创建,则依赖注入也会失败。可以检查一下Bean的配置是否正确,或者查看Bean的创建过程是否出现了错误。 以上是SpringBoot依赖注入null的一些常见原因及解决办法。需要注意的是,在实际开发中,出现依赖注入null的情况可能还会有其他原因,需要结合具体代码进行排查。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值