为何AnnotationConfigServletWebServerApplicationContext未实现指定接口方法?
问题解答
- 首先明确:
addBeanFactoryPostProcessor方法并非ConfigurableWebServerApplicationContext接口新增的,它来自该接口的父接口ConfigurableApplicationContext。 - Spring 的抽象上下文基类
AbstractApplicationContext已经完整实现了ConfigurableApplicationContext定义的所有方法,包括addBeanFactoryPostProcessor——它内部维护了一个List<BeanFactoryPostProcessor>集合,方法实现就是将传入的处理器添加到这个集合中。 AnnotationConfigServletWebServerApplicationContext的继承链是:AnnotationConfigServletWebServerApplicationContext→ServletWebServerApplicationContext→GenericWebApplicationContext→AbstractApplicationContext。通过继承,它自动拥有了AbstractApplicationContext中addBeanFactoryPostProcessor的实现,不需要自己重复编写。- 你之所以觉得“未实现”,是因为没有追踪到继承链中的上层实现——Spring 上下文类的设计大量使用继承复用核心逻辑,避免重复代码,所以子类不需要再实现那些已经被父类覆盖的接口方法。
内容的提问来源于stack exchange,提问作者husker
相关产品推荐
相关产品推荐

