最近研究spring-boot,集成dubbo,純java配置方式,單jar文件運行,開發支持熱部署,一個字「快」。java
@Bean(name = "companyOrgCodeService") public ReferenceBean<CompanyOrgCodeService> companyOrgCodeService() { ReferenceBean<CompanyOrgCodeService> ref = new ReferenceBean<CompanyOrgCodeService>(); ref.setProxy("jdk"); // 不設置會報錯,默認使用javassist作代理 ref.setVersion("1.1");// 設置版本 ref.setInterface(CompanyOrgCodeService.class);// 設置接口 // bean.setId("companyOrgCodeService"); // 設置bean id,和方法名同樣 return ref; }
上面的CompanyOrgCodeService是生產者發佈的一個接口,在沒有ref.setProxy("jdk");時,在消費端注入接口總是報錯UnsatisfiedDependencyException 「is not visible from class loader」,很長一串的堆棧錯誤信息。很長時間,進行了各類嘗試,直到看dubbo的官方文檔,注意到Proxy有兩種形式jdk/javassist,改爲jdk就沒報錯了,和提供者的代理類型一致。git
不過這裏對於引用的每一個接口配置,都要寫這麼一句,很麻煩,引用有個統一的配置。以下spring
/** * 引用配置 * * @return * @author wei.ss */ @Bean @SuppressWarnings("rawtypes") public ReferenceConfig referenceConfig(MonitorConfig monitorConfig) { ReferenceConfig rc = new ReferenceConfig(); rc.setProxy("jdk"); // 不設置會報錯,默認使用javassist作代理 rc.setMonitor(monitorConfig); return rc; }
完整的工程示例,參見spring-boot-jsp-demojsp