我在寫一個框架,但是主要功能是下位機與上位機交互的協(xié)議類似json雙方都可以靈活的通過幾個索引表中尋找字段(例如這串二進制數(shù)據(jù)描述了一個業(yè)務模型,我需要將這串二進制數(shù)據(jù)解析成一個Java對象),為了框架的使用的靈活性,我想模仿Spring中的WebMvcConfigurerAdapter但是現(xiàn)在遇到了一個問題,我寫出來的東西特別復雜,就不貼出來了,在此求助各路大神。
可以引用spring框架
類似以下這種配置方式
@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
/**
* 配置靜態(tài)訪問資源
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");
super.addResourceHandlers(registry);
}
}
@Configuration
public class ProtocolIndexConfigurerAdapterImpl extends ProtocolIndexConfigurerAdapter {
/**
* 配置靜態(tài)訪問資源
* @param registry
*/
@Override
public void addIndex(ProtocolIndexRegistry registry) {
// 0001是在二進制串中描述某字段的意義,
register.addTypeIndex("0001").register("id");
register.addTypeIndex("0002").register("name");
}
}更新2:
突然想起來,你這個更類似攔截器、過濾器的配置啊,可以參考一下。
更新:
interface ProtocolIndexConfigurer { void addIndex(ProtocolIndexRegistry registry); }
abstract class ProtocolIndexConfigurerRegister {
// 這里假設 registry 不是全局的,否則 configurer.addIndex(registry) 的調用形式很突兀
// 全局的話應該是 registry.addConfigurer(configurer) 這個你可以考慮一下
public abstract void register();
}
使用:
@Component("conf1")
class ProtocolIndexConfigurer1 implements ProtocolIndexConfigurer {
@Override
public void addIndex(ProtocolIndexRegistry registry) {
// 注冊行為...
}
}
@Component("conf2")
class ProtocolIndexConfigurer2 implements ProtocolIndexConfigurer { ... }
class MyProtocolIndexConfigurerRegister extends ProtocolIndexConfigurerRegister {
@Resource("conf1")
private ProtocolIndexConfigurer conf1; // 注入,或者用 @bean 導入都行
@Resource("conf2")
private ProtocolIndexConfigurer conf2;
@Override
public void register() {
conf1.addIndex(new ProtocolIndexRegistry());
conf2.addIndex(new ProtocolIndexRegistry());
// 如果 ProtocolIndexRegistry 是全局的,那么就可以是
// registry.addConfigurer(conf1)
.addConfigurer(conf2)
...
// 但是這樣改動可能比較大
}
}
原答案:
interface ProtocolIndexConfigurer { void addIndex(ProtocolIndexRegistry registry); }
@ConditionOnMissingBean(name = "example")
@Component
class ProtocolIndexConfigurerAdapter implements ProtocolIndexConfigurer {
@Override
public void addIndex(ProtocolIndexRegistry registry) { /* 空實現(xiàn) */ }
}
class SomewhereInjectProtocolIndexRegistry {
@Autowired
private final ProtocolIndexConfigurerAdapter adapter;
protected void func() {
ProtocolIndexRegistry registry = // get registry
adapter.addIndex(registry);
// save index mapping
}
}
使用:
@Bean(name = "example")
public SomeAdapter extends ProtocolIndexConfigurerAdapter {
@Override
public void addIndex(ProtocolIndexRegistry registry) {
// do something here.
}
}
印象里是這樣,你可以試一下,主要是 @ConditionOnxxx 注解的使用,給個空的默認實現(xiàn)避免找不到實現(xiàn)類拋異常。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。