spring bean:aware为bean进行增强的一个小例子
1.bean的生命周期:
首先是调用构造函数,创建一个bean
再进行依赖注入(例如通过@Autowired,@Rescourse,Setter注入)
实现aware接口,这个方法一般是方便对bean进行扩展的
bean的后置处理器-前置
初始化
bean的后置处理器-后置(aop就是走的这里实现的动态代理)
2.aware是如何为bean增强的:
以rabbitTemplate为例,我们在消息被发送到交换机时,可能会由于一些问题导致消息无法成功路由到队列,这时消息会返回给生产者。
rabbitTemplate中提供了setReturnCallback接口来处理这些返回消息(例如打日志,试图将消息重新投入交换机中)
我们可以使一个类来实现ApplicationContextAware,在再其中取出RabbitTemplate,自定义实现setReturnCallback方法
public class PayNotifyConfig implements ApplicationContextAware { public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { log.debug("初始化订单服务的mq通知配置"); RabbitTemplate rabbitTemplate = applicationContext.getBean(RabbitTemplate.class); MqMessageService mqMessageService = applicationContext.getBean(MqMessageService.class); //设置returnCallback rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> { log.info("消息发送失败,应答码:{},原因:{},返回交换机:{},路由key:{},消息内容:{}", replyCode, replyText, exchange, routingKey, message.getBody()); MqMessage mqMessage = JSON.parseObject(message.toString(), MqMessage.class); mqMessageService.addMessage(mqMessage.getMessageType(), mqMessage.getBusinessKey1(), mqMessage.getBusinessKey2(), mqMessage.getBusinessKey3()); }); } }