看《Spring 揭秘》的SpringMvc HandlerInterceptor一节时提到,Java平台API设计上的一个“光荣传统”。对于那些需要经常被扩展,而又包含多个方法需要实现的接口声明,通常情况下,使用者并不希望每次都实现所有的接口方法,使用者可能期望实现其中一个方法即可。
对于这种情况,API的设计者通常都会提供一个xxxAdaptor类专门用于避免实现所有接口方法的烦琐。
比如,在AWT/Swing 库中的各种事件监听器接口定义,通常会定义多个事件回调方法。例如,java.awt.event.MouseListener接口定义如下5个方法:
void mouseClicked(MouseEvent e)
void mousePressed(MouseEvent e)
void mouseReleased(MouseEvent e)
void mouseEntered(MouseEvent e)
void mouseExited(MouseEvent e)
通常情况下,我们可能只希望处理鼠标点击的一到两个动作,那么每次implements MouseListener接口则比较烦琐。MouseAdaptor将帮助我们减轻子类化的压力。我们直接继承MouseAdaptor,然后覆写需要实现的方法接口。
SpringMvc的 HandlerInterceptor 也有一个HandlerInterceptorAdapter 减轻拦截器的实现代码工作量。
注意:此种方式的Adaptor并不是 适配器模式的Adaptor