Ximplemetatio是一个基于Java注解的调用时路由框架。
它包括两个核心注解:
@Implemetor 此注解标注于类,表明类是某个或者某些类的实现类,就像implemets和exteds关键字。
@Implemet 此注解标注于@Implemetor类的方法,表明方法是实现方法,就像@Override注解。
示例假设有一个接口类如下:
public iterface Service{T plus(T a, T b);T mius(T a, T b);}那么,你可以自由地编写它的实现类:
public class ServiceImplDefault implemets Service{public T plus(T a, T b){...}public T mius(T a, T b){...}}public class ServiceImplPlusIteger implemets Service{@Overridepublic Iteger plus(Iteger a, Iteger b){...}@NotImplemet@Overridepublic Iteger mius(Iteger a, Iteger b){ throw ew UsupportedOperatioExceptio(); }}@Implemetor(Service.class)public class ServiceImplMiusIteger{@Implemetpublic Iteger mius(Iteger a, Iteger b){...}}注:ServiceImplMiusIteger并不是必须的。而且,你可以在同一个或者多个其他@Implemetor实现类内为plus和/或mius编写多个实现方法。
之后,你可以通过如下方式获得Service的实例:
Implemetatio implemetatio = ew ImplemetatioResolver().resolve(Service.class, ServiceImplDefault.class, ServiceImplPlusIteger.class, ServiceImplMiusIteger.class);ImplemetorBeaFactory implemetorBeaFactory = SimpleImplemetorBeaFactory.valueOf(ew ServiceImplDefault(), ew ServiceImplPlusIteger(), ew ServiceImplMiusIteger());Service service = ew ProxyImplemeteeBeaBuilder().build(implemetatio, implemetorBeaFactory);对于serivce.plus方法的调用,如果参数类型是Iteger,将被路由至ServiceImplPlusIteger.plus方法,否则,将被路由至ServiceImplDefault.plus方法;对于serivce.mius方法的调用,如果参数类型是Iteger,将被路由至ServiceImplMiusIteger.mius方法,否则,将被路由至ServiceImplDefault.mius方法。
扩展库Ximplemetatio-sprig是一个将ximplemetatio整合至Sprig的库,使Sprig能够支持多实例依赖注入和更多ximplemetatio特性。
点击此处查看详细ximplemetatio-sprig介绍。
点击此处下载ximplemetatio-sprig。
评论