Jersey 2中的两个自定义注入注释

 周啸夫_919 发布于 2023-02-10 12:06

我应该如何进行ValueFactoryProvider绑定,以便在Jersey 2中共存两个自定义注入注释?下面我已经包含了一个当前方法的示例,您可以看到Hello注释注入"隐藏"SmallTalk注释注入.

你好注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface Hello {
}

SmallTalk注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface SmallTalk {
}

Hello注释解析器:

@Singleton
public class HelloResolver {
    public static class HelloInjectionResolver extends ParamInjectionResolver {
        public HelloInjectionResolver() {
            super(HelloValueFactoryProvider.class);
        }
    }

    @Singleton
    public static class HelloValueFactoryProvider extends AbstractValueFactoryProvider {
        @Inject
        public HelloValueFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider,
                                         final ServiceLocator injector) {
            super(extractorProvider, injector, UNKNOWN);
        }

        @Override
        protected Factory createValueFactory(final Parameter parameter) {
            final Class classType = parameter.getRawType();

            if (classType == null || (!classType.equals(String.class))) return null;

            return new AbstractContainerRequestValueFactory() {
                @Override
                public String provide() {
                    return "Hello!";
                }
            };
        }
    }

    public static class Binder extends AbstractBinder {
        @Override
        protected void configure() {
            bind(HelloValueFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class);
            bind(HelloInjectionResolver.class).to(
                    new TypeLiteral>() {
                    }
            ).in(Singleton.class);
        }
    }
}

SmallTalk注释解析器:

@Singleton
public class SmallTalkResolver {
    public static class SmallTalkInjectionResolver extends ParamInjectionResolver {
        public SmallTalkInjectionResolver() {
            super(SmallTalkValueFactoryProvider.class);
        }
    }

    @Singleton
    public static class SmallTalkValueFactoryProvider extends AbstractValueFactoryProvider {
        @Inject
        public SmallTalkValueFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider,
                                             final ServiceLocator injector) {
            super(extractorProvider, injector, UNKNOWN);
        }

        @Override
        protected Factory createValueFactory(final Parameter parameter) {
            final Class classType = parameter.getRawType();

            if (classType == null || (!classType.equals(String.class))) return null;

            return new AbstractContainerRequestValueFactory() {
                @Override
                public String provide() {
                    return "Nice weather.";
                }
            };
        }
    }

    public static class Binder extends AbstractBinder {
        @Override
        protected void configure() {
            bind(SmallTalkValueFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class);
            bind(SmallTalkInjectionResolver.class).to(
                    new TypeLiteral>() {
                    }
            ).in(Singleton.class);
        }
    }
}

资源配置:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new HelloResolver.Binder());
        register(new SmallTalkResolver.Binder());
        registerClasses(HelloResource.class);
    }
}

使用注入注释的资源:

@Path("/")
public class HelloResource {
    @GET
    @Path("hello")
    @Produces("application/json")
    public String hello(@Hello final String hello, @SmallTalk final String smallTalk) {
        return hello + " " + smallTalk;
    }
}

请求资源时的结果 - 应该是"Hello! Nice weather.":

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有