首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止Spring注释处理

停止Spring注释处理
EN

Stack Overflow用户
提问于 2016-05-30 10:38:07
回答 2查看 359关注 0票数 1

我需要停止处理接口上的Spring注释,但是应该为这个接口创建bean。例如,我已经与MVC REST注释共享了Api接口,Controller实现了这个Api。在其他项目中,我基于接口创建REST客户端(通过处理注释)。但是,当我创建客户端时,Spring将接口视为返回类型和内部的流程注释。因此,在创建REST客户端时,我需要停止注释处理,但是对于控制器注释,应该可以工作(现在它们可以工作了)。

代码语言:javascript
运行
复制
@RequestMapping("/resource1")
public interface Api {
    @RequestMapping(method = RequestMethod.POST)
    Resource1 getResource1();
}

@RestController
public class Controller implements Api {
    @Override
    public Resource1 getResource1() {
         return null;
    }
}

@Configuration
public class Config {
    @Bean
    public Api api() {
         return RestClientFactory.createRestClientBasedOnAnnotations(Api.class);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-08 11:41:22

通过创建新的注释来解决该问题,该注释用于标记API接口和重写org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappingorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping方法。该方法最初检查类(或类实现的任何接口)是否带有ControllerRequestMapping注释。我添加了额外的检查,查找我的BackEndApiInterface注释,如果找到它,则返回false。以下是代码:

代码语言:javascript
运行
复制
@Retention(RetentionPolicy.RUNTIME)
public @interface BackEndApiInterface {
}

@BackEndApiInterface 
@RequestMapping("/resource1")
public interface Api {
    @RequestMapping(method = RequestMethod.POST)
    Resource1 getResource1();
}

@RestController
public class Controller implements Api {
    @Override
    public Resource1 getResource1() {
        return null;
    }
}

@Configuration
public class Config {
    @Bean
    public Api api() {
         return RestClientFactory.createRestClientBasedOnAnnotations(Api.class);
    }

    @Bean
    public static RequestMappingHandlerMapping requestMappingHandlerMapping() {
        return new RequestMappingHandlerMapping() {
            @Override
            protected boolean isHandler(Class<?> beanType) {
                if (AnnotationUtils.findAnnotation(beanType, BackEndApiInterface.class) != null) {
                    return false;
                }
                return super.isHandler(beanType);
            }
        };
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-08 11:47:17

您可以将注释移到实现中,并将接口保持为纯java。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37523595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档