最近搞了一下websocket前台(這個網上有很多的教程這里就不班門弄斧啦) 以及前后台的交互 和后台的bug(搞了兩天) 也是狀態頻發 bug不斷 下面說一說問題、
Websocket主類里面無法注入Service 從而導致Service里Mapper也注入為null 具體原因的還是因為websocket主類里的一個
@Component 的注解 他的作用呢就是實例化 但是他是項目啟動時就實例化的 這樣 后續的注入就會注入不進去 后來自作聰明在主類里new的一個service 進去是進去了
但是在service進mapper的時候 mapper又注入不進去了 這次注入不進去的原因就是因為你這個service是new出來的所以無法注入 還是要從根本上及決問題啊;;;
@component (把普通pojo實例化到spring容器中,相當於配置文件中的 <bean id="" class=""/>) 泛指各種組件,就是說當我們的類不屬於各種歸類的時候(不屬於@Controller、@Services等的時候),我們就可以使用@Component來標注這個類。 案例: <context:component-scan base-package=”com.*”> 上面的這個例子是引入Component組件的例子,其中base-package表示為需要掃描的所有子包。 共同點:被@controller 、@service、@repository 、@component 注解的類,都會把這些類納入進spring容器中進行管理
解決方案: 注入不進去的根本原因還在於是加載主類的時候沒有實例化到service 所以我們在Application 啟動類里加入ConfigurableApplicationContext
下面附上application、websocket上的代碼供大家參考:
Application:
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(WebsocketApplication.class);
ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
WebsocketServer.setApplicationContext(configurableApplicationContext);
}
WebsocketServer:
@Autowired
private WebsocketService websocketService;
private static ApplicationContext applicationContext;
public static void setApplicationContext(ApplicationContext applicationContext){
WebsocketServer.applicationContext = applicationContext;
}
//需要用到service的方法內
websocketService=applicationContext.getBean(WebsocketService.class);
之后就是@Value注解在本WebsocketServer類里獲取不到我在application.yml里配置的值 試了好多方法都不行(后來在ServiceImpl類里獲取的值)
哪位大佬有解決辦法可以共享一下將感激不盡
