spring重复注入爬坑

在整合RabbitMQ时遇到了spring的属性注入无效的问题,配置问题处如下:


    
        
        
    

这里消费者的amqpTemplate属性应该注入rabbitTemplate的rebbitMq连接实体,但是一直报空指针异常,打印属性也是为空:

jvm 1    | messageSender.getAmqpTemplate() = null
jvm 1    | routingKey = message.test
jvm 1    | Obj = tzFirstMessage

导致生产者无法连接上消息队列,经过一下原生态连接测试发现连接信息没错:

public void connectionMQ() throws IOException {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("test");
        Connection connection = connectionFactory.newConnection();
        int heartbeat = connection.getHeartbeat();
        System.out.println("heartbeat = " + heartbeat);
    }

    public static void main(String[] args) throws IOException {
        RabbitMQTest rabbitMQTest = new RabbitMQTest();
        rabbitMQTest.connectionMQ();
    }
 /*
heartbeat = 60
*/

所以判断是此处spring注入无效,经过测试,发现是注释方法和xml配置方法同时注册了bean,导致此处xml注入无效。问题代码如下:

@Service(value = "MessageSender")
public class MessageSender {
 ... ...
}

此处注解声明和上面的XML声明冲突,覆盖了上面的依赖注入,故删掉此处注解即可解决问题。

进一步实验发现,该注解上的value导致冲突,不添加value的话spring会自动判断重复,不会出现依赖注入覆盖的情况,删掉Service注解后的括号就可以了。

通过这个问题,对spring的多种依赖注入方式有了更深的理解,因祸得福。

你可能感兴趣的:(spring重复注入爬坑)