Solon 自定义注解类

起因:在 热插拔 插件开发中,插件里有一些地方需要引入公共的 Service,直接使用 Inject 注解会注入失败,必须手动进行获取。

Solon.context().getBeanOrNew(class)

但每次这样去写有一些麻烦,所以自定义了一个注入类

  1. 新建一个 注解类,如 XInject,代码如下
    @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface XInject {
    }
  2. 新建拦截处理器:XInjectAround,代码如下
    public class XInjectAround {
    
        public static void injectAround() {
            AppContext context = Solon.context();
            context.beanInjectorAdd(XInject.class, (fwT, anno) -> {
                context.getWrapAsync(fwT.getType(), (bw) -> {
                    fwT.setValue(context.getBeanOrNew(bw.clz()));
                });
            });
        }
    
    }
  3. 在启动类中执行拦截处理器
    SolonApp app = Solon.start(StartApp.class, args, solonApp -> {
        XInjectAround.injectAround();
    });
  4. 使用的时候只需要将 @Inject  替换成 @XInject
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容