Spring-同じインタフェースに複数のインスタンスを注入
1847 ワード
一般的な開発では、1つのインタフェースが1つの実装クラスに対応していますが、ビジネスシーンでは、1つのインタフェースが複数の実装クラスに対応している場合があります.この場合、@Autowire注入を直接使用するとエラーが発生する可能性があります.次に、一般的な解決方法について説明します.以下のようなサービスインタフェースよりも、複数の実装があります.
次の3つの注入方式により,マルチインタフェースのインスタンス注入を完了することができる.
1@Autowiredを使用する:サービスオブジェクト名はbeanNameと同じにする
2@Resourceを使用:注入したnameの名前をサービスのオブジェクト名と一致させる
3@Autowired+@Qualifierを使用
次に、条件によるダイナミックマッチングインスタンスの作成方法について説明します.
//
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 {}
次の3つの注入方式により,マルチインタフェースのインスタンス注入を完了することができる.
1@Autowiredを使用する:サービスオブジェクト名はbeanNameと同じにする
@Autowired
private IProducerService kafkaProducerService;
@Autowired
private IProducerService rocketProducerService;
@Autowired
private IProducerService rabbitProducerService;
2@Resourceを使用:注入したnameの名前をサービスのオブジェクト名と一致させる
@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;
次に、条件によるダイナミックマッチングインスタンスの作成方法について説明します.