在阅读spring rabbitmq的源码中,发现RabbitListenerAnnotationBeanPostProcessor实现了BeanPostProcessor,RabbitAdmin实现了InitializingBean。在debug的过程中发现打的断点RabbitAdmin与RabbitListenerAnnotationBeanPostProcessor代码之间到处乱跳,属实有点难受。因此大概看了一下其执行顺序:
BeanPostProcessor包含:postProcessBeforeInitialization()、postProcessAfterInitialization()两个方法。
InitializingBean包含了afterPropertiesSet()方法。
在实际的执行过程中,应该是bean初始化之前执行postProcessBeforeInitialization()->初始化过程中执行afterPropertiesSet()->bean初始化之后执行postProcessAfterInitialization()。
需注意的是,实现BeanPostProcessor的类,postProcessBeforeInitialization()与postProcessAfterInitialization()是对单个bean进行处理,处理完一个bean,下一个bean才会调用这两个方法。