-
Notifications
You must be signed in to change notification settings - Fork 49
JPlugin扩展开发
sunlet edited this page May 13, 2022
·
14 revisions
PluginEnvirement.getInstance().resolveRefAnnotation(object);
#注意:在启动阶段,这个调用完毕以后相关Ref不会立即生效,但是会在后续阶段专门对属性赋值。
-
步骤一:写一个实现类实现IAnnoForAttrHandler 接口,泛型是标注类。比如:下面是RefService的实现:
public class ServiceAttrAnnoHandler implements IAnnoForAttrHandler<RefService> { public static IServiceExtensionResolver serviceExtensionResolver; public Class<RefService> getAnnoClass() { return RefService.class; } public Class getAttrClass() { return Object.class; } /** * 先查找RuleService,再查找Service */ public Object getValue(Object theObject, Class fieldType, RefService anno) { Object o=null; try { // 发生查找错误,不要抛出异常,后续查找 if (serviceExtensionResolver != null) { o = serviceExtensionResolver.resolve(theObject, fieldType, anno); } } catch (RuntimeException e) { o = null; } if (o == null){ o = get(fieldType,anno); } return o; } private Object get(Class fieldType, RefService anno) { if (anno.name().equals("")) return ServiceFactory.getService(fieldType); else return ServiceFactory.getService(anno.name(), fieldType); } } 补充说明:如果有必要可以实现接口的 另一个defualt方法 default Object getValue(Object theObject,Class fieldType,Field f, T anno) ,可以获取到的信息更多一些。
-
步骤二:在Plugin的构造函数当中,加入下面一句:
public Plugin(){ ... ExtensionKernelHelper.addAnnoAttrHandlerExtension(this, AnnoForExtensionsHandler.class); ... }