简述
这是个大胆的想法!!可能已经有很多大神早就明白这种做法是可行的,不过我还是笔记一下。
笔者在项目实践中遇到了这样的问题:需要引用的组件,其提供的API是使用servlet的,与项目的Spring框架相性不好。
研究与实践
具体的来说,笔者所使用的组件是实现远程控制guacamole。
笔者debug查看的其在servlet的方法调用栈很浅,从doGet(doPost…)的方法到实现类的核心方法仅仅两层。
然后其在前端的JSAPI中所发请求也是常见的xmlHttpRequest。
最后我实践里一下,确实适配可行。
方法
原理是,本来组件其servlet的继承层很浅,而且组件整体是前后分离式。
于是简便的方式就是,将实现类置于controller的成员中,并将其核心抽象方法的访问级别改为public。然后本需在web.xml里配置的映射就略去了,交给Dispatcher管理。
另一个不美观整洁的方法就是完整把起servlet的继承链所有核心方法直接整理逻辑作为controller的方法。
效果
这样的好处是,将servlet的特殊异常也能归于Spring中可以集中化的异常管理,这样也是一定程度上的代码管理方便。
潜在的威胁可以就不可而知了。