[英]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
注释方法映射到路由 以上大部分内容已在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.