Spring-同個接口注入多個實例

一般開發,都是一個接口對應一個實現類,但是有時候有些業務場景可能面臨一個接口對應多個實現類,這個時候如果直接使用@Autowire注入有可能就會報錯,下面就把常用解決方法闡述一下:比如下面這個服務接口,就有多個實現

//生產消息服務接口
public interface IProducerService {}

//使用kafak發送消息
@Service("kafkaProducerService")
@Log4j2
public class KafkaProducerService  implements IProducerService {}

//使用rabbitmq發送消息
@Service("rabbitProducerService")
@Log4j2
public class RabbitProducerService implements IProducerService {}

//使用rocketmq發送消息
@Service("rocketProducerService")
@Log4j2
public class RocketProducerService implements IProducerService {}



我們可以通過如下三種注入方式,完成多接口的實例注入

1 使用@Autowired:service對象名要和beanName相同

    @Autowired
    private IProducerService kafkaProducerService;

    @Autowired
    private IProducerService rocketProducerService;

    @Autowired
    private IProducerService rabbitProducerService;

2 使用 @Resource:注入的name的名稱要和service的對象名要一致

    @Resource(name = "kafkaProducerService")
    private IProducerService kafkaProducerService;

    @Resource(name = "rocketProducerService")
    private IProducerService rocketProducerService;

    @Resource(name = "rabbitProducerService")
    private IProducerService rabbitProducerService;

3 使用 @Autowired + @Qualifier


    @Qualifier(value = "kafkaProducerService")
    @Autowired
    private IProducerService getKafkaProducerService;

    @Qualifier(value = "rocketProducerService")
    @Autowired
    private IProducerService getRocketProducerService;

    @Qualifier(value = "rabbitProducerService")
    @Autowired
    private IProducerService getRabbitProducerService;

下一次會介紹如何通過條件進行動態匹配實例的創建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章