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());
        });
    }
}

 

posted @ 2024-11-25 19:13  天启A  阅读(0)  评论(0编辑  收藏  举报