Hessian
是一個binary-rpc
協議輕量級RPC調用框架,相對於咱們常見的Dubbo
,Spring Cloud
使用起來方便簡潔。git
基於Spring IOC
實現Hessian
註解形式服務發佈與服務消費。從實現過程深刻了解Spring 依賴注入的原理。github
HessianServiceProxyExporter
bash
public class HessianServiceProxyExporter extends HessianServiceExporter {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//此處可作統一數據驗籤
log.info("HessianServiceProxyExporter get request at {}" , LocalDateTime.now());
super.handleRequest(request ,response);
}
}
複製代碼
hessian 服務暴露框架
@Bean(name = "/userService")
public HessianServiceExporter initHessian(){
HessianServiceExporter exporter = new HessianServiceProxyExporter();
exporter.setService(new UserServiceImpl());
exporter.setServiceInterface(IUserService.class);
return exporter;
}
複製代碼
hessian 服務消費ide
@Bean
public HessianReferenceProxyFactoryBean helloClient() {
HessianReferenceProxyFactoryBean factory = new HessianReferenceProxyFactoryBean();
factory.setServiceUrl("http://127.0.0.1:8080/userService");
factory.setServiceInterface(IUserService.class);
return factory;
}
複製代碼
將hessian 服務初始化到Spring IOC容器中後與普通Service使用同樣。post
@Autowired
private IUserService userService;
複製代碼
咱們從上述的使用Hessian的服務開發過程當中會發現每個Hessian服務的開發都會有一一對應的服務暴露,服務引用。當系統比較龐大的時候就會增長服務管理的難度與大量的重複代碼學習
隨着Spring Boot普及,愈來愈多人習慣於註解開發模式。Hessian 也能夠實現註解模式的開發與使用。ui
咱們先來分析下Hessian服務暴露的過程:spa
@HessianService
Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface HessianService {
/**
* hessian服務名稱
* @return
*/
String name() default "";
}
複製代碼
Service Bean的實例交由Spring IOC來處理設計
經過實現InitializingBean
, ApplicationContextAware
相應的接口處理@HessianService
服務暴露
consumer 消費服務,借鑑@Autowired
實現思路:繼承InstantiationAwareBeanPostProcessorAdapter
重載postProcessPropertyValues
方法
InstantiationAwareBeanPostProcessorAdapter
Bean實例化後但在設值顯示屬性以前回調(實現額外injection策略)postProcessPropertyValues
實現依賴注入以上便實現了Hessian的註解模式
@HessianService
public class StudentServiceImpl implements IStudentService{
}
複製代碼
@HessianReference
private IUserService userService;
複製代碼
上述實現過程當中,咱們可明顯看出:基於Spring framework
的開發中 一切的Bean操做都圍繞IOC
容器進行;並體現了Spring framework
一個很重要的核心思想面向擴展開放
,Spring framework
提供了多種可供擴展的接口,經過實現接口中的方法可實現個性化業務(如上述中的@ HessianReference
依賴注入)
此篇文章的重點不是實現Hessian
註解模式,而是經過Hessian
註解模式的實現過程學習Spring
良好的設計分層(面向擴展開放):經過分層的設計使得咱們的代碼具高可擴展性