@Configuration注解中引用bean
背景介绍:需要在一个配置类里面引用一个bean
直接上代码
@Configuration
@ComponentScan(value = "cn.loveyx815.rocketmq.mqtransaction.message")
public class MQConfig {
@Bean(name = "prooducer", initMethod = "init", destroyMethod = "destory")
@DependsOn(value = "userLocalTransactionListener")
public TransactionSpringProducer transactionSpringProducer(UserLocalTransactionListener userLocalTransactionListener) {
return new TransactionSpringProducer("transaction_spring_producer_group", Consts.MQ_ADDR, 2, 5, 1000, userLocalTransactionListener);
}
@Bean(name = "consumer", initMethod = "init", destroyMethod = "destory")
@DependsOn(value = "transactionMessageListener")
public TransactionSpringConsumer transactionSpringConsumer( TransactionMessageListener transactionMessageListener) {
return new TransactionSpringConsumer("transaction_consumer_group4", Consts.MQ_ADDR, "distributed_transaction_spring_topic", transactionMessageListener);
}
}
transactionMessageListener和userLocalTransactionListener这两个bean是被放入在Spring容器中,通过注解 Component 生成。
正确的做法是直接在你想要调用的方法里直接传入对应的bean即可。
-------------------------------------------------------------------------------------------
下面是错误的做法:
@Configuration
@ComponentScan(value = "cn.loveyx815.rocketmq.mqtransaction.message")
public class MQConfig {
@Autowired
private UserLocalTransactionListener userLocalTransactionListener;
@Autowired
private TransactionMessageListener transactionMessageListener;
@Bean(name = "prooducer", initMethod = "init", destroyMethod = "destory")
@DependsOn(value = "userLocalTransactionListener")
public TransactionSpringProducer transactionSpringProducer() {
return new TransactionSpringProducer("transaction_spring_producer_group", Consts.MQ_ADDR, 2, 5, 1000, userLocalTransactionListener);
}
@Bean(name = "consumer", initMethod = "init", destroyMethod = "destory")
@DependsOn(value = "transactionMessageListener")
public TransactionSpringConsumer transactionSpringConsumer( ) {
return new TransactionSpringConsumer("transaction_consumer_group4", Consts.MQ_ADDR, "distributed_transaction_spring_topic", transactionMessageListener);
}
}
与正确的不同的是下面的是自己在里面手动注入了这两个bean,去掉了方法参数。而结果得到的两个bean都为null