TeamCity插件API允许通过扩展控制器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
不可用时,它似乎崩溃了。
答案 0 :(得分:0)
不是TeamCity
用户。但是我会给我两分钱,希望能得到最好的。
既然您可以注册Spring Bean
,为什么不尝试ClassPathBeanDefinitionScanner
?
如果您可以某种方式访问Spring生命周期挂钩,初始化挂钩,或者能够注册Configuration
类,则可以创建类型Bean
的{{1}}。我会给您一个Java示例,但是您应该能够将其快速转换为XML。
BeanFactoryPostProcessor
@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
}
}
}
};
}
将注册所有带有Spring构造型注释的类。
您还可以使类直接实现ClassPathBeanDefinitionScanner
接口。