繁体   English   中英

在TeamCity中从AbstractController中获取Spring RestController

[英]Spring `RestController` from `AbstractController` in TeamCity

TeamCity插件API允许通过扩展其BaseController来添加控制器, BaseController是Spring的AbstractController的瘦包装。

当我扩展BaseController我可以用通常的Spring方式将bean注入到构造函数中。 这是由像标准spring这样的bean定义文件管理的。

为了提供一个控制器,我必须扩展BaseController ,重写public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) ,并将控制器添加到bean定义中。 我将URL路由注册为构造函数初始化的一部分。

这就是我可用于Controller的所有扩展点。

我希望能够编写一个小型框架,该框架允许我使用@RestController@RequestMapping等对类进行注释。

我认为我需要做的是:

  • 连接注释处理器以查找我的控制器及其方法。
  • 构建某种映射器,将@RequestMapping注释方法映射到路由
  • 连接一些内容处理程序,例如对JSON和XML进行序列化/反序列化
  • 将传入的请求分配到我的handleRequest方法中的适当方法

以上大部分内容已在Spring和Jersey编写,我想知道从哪里开始进行研究。

哪些类提供上述功能? 我尝试了一些尝试实例化MVC的事情,但是当ApplicationContext不可用时,它似乎中断了。

不是TeamCity用户。 但是我会给我两美分,希望能得到最好的。
既然可以注册Spring Bean ,为什么不尝试ClassPathBeanDefinitionScanner

如果您可以某种方式访问​​Spring生命周期挂钩,初始化挂钩,或者能够注册Configuration类,则可以创建BeanFactoryPostProcessor类型的Bean 我将为您提供一个Java示例,但是您应该能够将其快速转换为XML。

@Bean
public BeanFactoryPostProcessor beanFactoryPostProcessor(final ApplicationContext applicationContext) {
    return new BeanFactoryPostProcessor() {
        @Override
        public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException {
            if (beanFactory instanceof BeanDefinitionRegistry) {
                try {
                    final BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
                    final ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry);
                    scanner.setResourceLoader(applicationContext);
                    scanner.scan("your.base.package");
                } catch (final Exception e) {
                    // Handle
                }
            }
        }
    };
}

ClassPathBeanDefinitionScanner将注册所有带有Spring ClassPathBeanDefinitionScanner型注释的类。
您还可以使一个类直接实现BeanFactoryPostProcessor接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM