20181114 java 框架之對自己的註解負責

作爲一名java打字員,從坑裏爬出來的時候,總是情不自禁,手舞足蹈。
本次使用springboot + javax.websocket 的過程中,兩種框架的註解混用,出現不兼容,幾番試驗,得出結論,誰的註解誰解釋。

使用javax的websocket,並交由SpringBoot 管理,採用的方案是:
@ServerEndpoint
@Component
public class WebSocketServer{
@Autowired
private Demo demo;

@RequestMapping   //springframework 的註解
public String index(){
//demo 在此處是經框架實例化後的對象,非null.
}

@OnOpen  // javax的註解
public void open(){
//demo 在處將爲null.
}
@OnClose
public void close(){}
@OnError
public void error(){}
@OnMessage
public void message(){}
}

// 以上註解,除了@Component ,@RequestMapping,@Autowired 屬於springframework,其他都是javax的註解,使用@Component,提醒springframework管理該類。此時,如果使用@Autowired 註解,將其他bean注入該類,那麼只有在springframework 註解修飾的地方,才能使用注入的bean,換言之,javax的註解修飾的裏面,不能使用,該成員變量將會是null. 
//解決方案時,可以在WebSocketConfig類或者WebSocketServer類裏面,手動注入Bean,將它存入WebSocketServer 的一個靜態成員變量,給所有的WebSocketServer對象使用。

我嘗試在javax註解修飾的方法裏調用springframeword註解修飾的方法,試圖得到@Autowired注入的bean,結果是失敗了。這大概要從框架對註解的解讀原理去理解,畢竟jvm運行的是字節碼,jdk編譯的是框架解讀並自動裝配後的代碼,一些可見規則和儲存規則,不能按java基本語法來理解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章