從Hessian RPC 註解方式看Spring依賴注入

前言

Hessian 是一個binary-rpc協議輕量級RPC調用框架,相對於咱們常見的DubboSpring Cloud 使用起來方便簡潔。git

基於Spring IOC 實現Hessian註解形式服務發佈與服務消費。從實現過程深刻了解Spring 依賴注入的原理。github

Hessian 使用

HessianServiceProxyExporterbash

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服務的開發都會有一一對應的服務暴露,服務引用。當系統比較龐大的時候就會增長服務管理的難度與大量的重複代碼學習

Hessian 註解實現

隨着Spring Boot普及,愈來愈多人習慣於註解開發模式。Hessian 也能夠實現註解模式的開發與使用。ui

@HessianService

咱們先來分析下Hessian服務暴露的過程:spa

  • 實例化一個Service Bean
  • 實例化一個HessianServiceExporter bean
  • 將HessianServiceExporter 註冊到IOC容器中進行統一管理 這樣咱們就能夠定義一個組合註解@HessianService
Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface HessianService {
    /**
     * hessian服務名稱
     * @return
     */
    String name() default "";
}
複製代碼

Service Bean的實例交由Spring IOC來處理設計

經過實現InitializingBean , ApplicationContextAware相應的接口處理@HessianService服務暴露

@HessianReference

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良好的設計分層(面向擴展開放):經過分層的設計使得咱們的代碼具高可擴展性

源碼在這裏

相關文章
相關標籤/搜索