注解說明:移步 == 》
首先說明一下已有組件的原理:
❤️在系統啟動,spring加載時,我們判定一個即將實例化到spring容器中的對象否實現組件接口,如果實現則將其寫入組件上下文(ComponentContext)的靜態變量集合中,并且加載component.xml文件,生成ComponentView(組件視圖)和PluginVIew(插件視圖)
❤️自定義的監聽器(EopContextLoaderListener)執行時,啟動組件。根據ComponentView和PluginView正確生成可以正確調用插件的插件樁
修改后的邏輯
❤️在系統啟動,spring加載時,我們判定一個即將實例化到spring容器中的對象否實現特定接口,如果實現 組件借口(IComponent) 則將其寫入組件上下文(ComponentContext)的靜態變量集合中,如果實現了插件接口(IPlugin)則將其寫入插件上下文(PluginContext)
❤️自定義的監聽器(EopContextLoaderListener)執行時,獲取組件上下文中所有的組件,循環遍歷從插件上下文中獲取到組件對應的插件集合,根據每個組件和插件的注解,映射出正確的ComponentView(組件視圖)和PluginVIew(插件視圖)。隨后,啟動組件,根據ComponentView和PluginView正確生成可以正確調用插件的插件樁。
注解類講解:
插件注解
CustomPlugin(自定義插件注解)
插件名稱public String name() default “默認插件”;
組件public String component() default “組件id”;
插件public String plugin() default “插件id”;
執行優先級(保留字段 控制執行順序) public int sort() default 10;
插件樁集合public String[] bundle() default “”;
CustomComponent(自定義組件注解)
組件名稱public String name() default “默認組件”;
組件idpublic String beanid() default “”;
版本public String version() default “1.0”;
javashop版本public String javashop_version() default “3.0.0”;
作者public String author() default “javashop”;
描述public String description() default “默認描述”;
屬性字段基本和component.xml的配置具體參數沒什么區別, 所以修改為注解的形式沒有大的改動,只是更改了生成 ComponentView和PluginView的方式。
注解使用
在組件插件具體的類上,聲明注解即可。
以上是對注解方式的組件的具體使用解釋,接下來講解連帶的其它變更
1、組件加載
ComponentLoader(組件加載)在bean實例化之前的方法中,加入了插件上下文(PluginContext)的注冊。
新增的插件上下文主要包含一個靜態Map類型,key存組件的beanid,value存該組件的插件集合。
2、組件注冊
ComponentContext(組件上下文)的注冊組件方法中原本加載組件視圖的方法被移除
3、組件啟動
EopContextLoadListener(Eop上下文啟動監聽器)中,組件啟動前,獲取組件上下文中所有的組件視圖,然后執行組件加載視圖方法。(也就是在組件注冊時的方法被延后執行)
隨后執行原本的組件啟動方法。
*********************************************主要修改部分************************************************
ComponentContext組件上下文核心方法loadComponent修改,為了兼容老版本的組件機制,這里對Bean是否聲明了組件注解進行判定:
如果沒有聲明,那么按照傳統的方法獲取component.xml生成組件插件視圖。
如果有聲明,則獲取注解信息進行組件和插件視圖的生成。
*********************************************************************************************************
為什么組件機制使用注解實現
spring用注解的方式來管理容器中bean的關系,是所有人看的到到優點,使用注解之前,采用在xml中配置文件的繁瑣程度不言而喻。使用注解唯一的缺點不外乎是管理松散,不能概括的了解組件、插件和插件樁的關系。但是只要項目結構足夠合理,我相信這個問題是可以避免的。
拋開這些不說,作為一個程序員,喜歡看起來可以裝X的代碼,拋棄xml配置文件才用注解在個人看來是一個提升逼格的方法。哈哈哈哈