# Ximplementation **Repository Path**: mirrors/Ximplementation ## Basic Information - **Project Name**: Ximplementation - **Description**: Ximplementation是一个可以让你基于Java注解自由编写实现类的框架,同时能够使你的程序支持调用时路由 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://www.oschina.net/p/ximplementation - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-09-07 - **Last Updated**: 2023-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [英文](README.md) | [中文](README_zh-CN.md) # ximplementation Ximplementation是一个基于Java注解的调用时路由框架。 它包括两个核心注解: * `@Implementor` 此注解标注于类,表明类是某个或者某些类的实现类,就像`implements`和`extends`关键字。 * `@Implement` 此注解标注于`@Implementor`类的方法,表明方法是实现方法,就像`@Overriden`注解。 ## 示例 假设有一个接口类如下: ```java public interface Service { T plus(T a, T b); T minus(T a, T b); } ``` 那么,你可以自由地编写它的实现类: ```java public class ServiceImplDefault implements Service { public T plus(T a, T b){...} public T minus(T a, T b){...} } public class ServiceImplPlusInteger implements Service { @Override public Integer plus(Integer a, Integer b){...} @NotImplement @Override public Integer minus(Integer a, Integer b){ throw new UnsupportedOperationException(); } } @Implementor(Service.class) public class ServiceImplMinusInteger { @Implement public Integer minus(Integer a, Integer b){...} } ``` > `ServiceImplMinusInteger`并不是必须的。 > 而且,你可以在同一个或者多个其他`@Implementor`实现类内为`plus`和/或`minus`编写多个实现方法。 之后,你可以通过如下方式获得`Service`的实例: ```java Implementation implementation = new ImplementationResolver().resolve(Service.class, ServiceImplDefault.class, ServiceImplPlusInteger.class, ServiceImplMinusInteger.class); ImplementorBeanFactory implementorBeanFactory = SimpleImplementorBeanFactory .valueOf(new ServiceImplDefault(), new ServiceImplPlusInteger(), new ServiceImplMinusInteger()); Service service = new ProxyImplementeeBeanBuilder().build(implementation, implementorBeanFactory); ``` 对于`serivce.plus`方法的调用,如果参数类型是`Integer`,将被路由至`ServiceImplPlusInteger.plus`方法,否则,将被路由至`ServiceImplDefault.plus`方法;对于`serivce.minus`方法的调用,如果参数类型是`Integer`,将被路由至`ServiceImplMinusInteger.minus`方法,否则,将被路由至`ServiceImplDefault.minus`方法。