1、Solon 的三大核心組件
核心組件 | 說明 |
---|---|
Plugin 插件擴展機制 | 提供“編碼風格”的擴展體系 |
Ioc/Aop 應用容器 | 提供基于注入依賴的自動裝配體系 |
Context+Handler 通用上下文處理接口 | 提供“開放式處理”適配體系(俗稱,三元合一) |
2、Solon Plugin 插件擴展機制
幾種 Java 擴展機制:
擴展機制 | 描述 | 特點 | 體驗風格 | 適用性 |
---|---|---|---|---|
Java SPI | Java 自帶的 | 以接口為單位 | 配置風格 | 適用于所有 Java 生態(最通用) |
Spring Factories | Spring 框架提供的 | 以組件為單位 | 配置風格 | 適用于 Spring 生態體系 |
Solon Plugin | Solon 框架提供的 | 以模塊為單位 | 編碼風格 | 適用于 Solon 生態體系 |
Solon Plugin 是 Java SPI 的一種“增強”模式,強調編碼風格。插件模塊元信息配置會申明一個 Plugin 接口的實現類,在應用啟動時掃描元信息目錄,以發現所有申明的插件實現。
Plugin 的接口定義:
public interface Plugin {//啟動void start(AppContext context) throws Throwable;//預停止default void prestop() throws Throwable{}//停止default void stop() throws Throwable{}
}
Plugin 實現類的元信息配置申明:以 META-INF/solon
為專屬目錄;使用 properties
格式;要配置插件的實現類及優先級。
# META-INF/solon/{packname}.propertiessolon.plugin={PluginImpl} #插件實現類配置
solon.plugin.priority=1 #插件優化級配置。越大越優先,默認為0
3、Solon Plugin 插件示例
用一個數據緩存與事務相關的插件為例,以模塊為單位實現整體裝配(編碼風格):
public class DemoSolonPlugin implements Plugin {@Overridepublic void start(AppContext context) {if (context.app() != null) {//添加事務控制支持if (context.app().source().isAnnotationPresent(EnableTransaction.class)) {//添加注解攔截器context.beanInterceptorAdd(Tran.class, TranInterceptor.instance, 120);}//添加緩存控制支持if (context.app().source().isAnnotationPresent(EnableCaching.class)) {//添加注解攔截器context.beanInterceptorAdd(CachePut.class, new CachePutInterceptor(), 110);context.beanInterceptorAdd(CacheRemove.class, new CacheRemoveInterceptor(), 110);context.beanInterceptorAdd(Cache.class, new CacheInterceptor(), 111);}}//根據配置自動構建數據源context.beanMake(DataSourcesAutoConfiguration.class);}
}
插件應用示意:
@EnableTransaction
@EnableCaching
public class App {public static void main(String[] args) {Solon.start(App.class, args);}
}@Component
public class DemoService {@Cachepublic String test() {return new Date().toString();}@Tranpublic void post() {...}
}