You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Micronaut中注入同一接口的不同实现类

嘿,这个问题我刚好处理过,Micronaut里注入同一个接口的多个实现其实很 straightforward,完全能满足你想要的注入方式。下面一步步来实现:

实现步骤

1. 创建自定义限定符注解

首先你需要定义@MotoDao和@CarDao这两个限定符注解,用来标记不同的实现类。Micronaut支持用@Qualifier元注解来创建自定义限定符:

import jakarta.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Qualifier
@Target({TYPE, METHOD, PARAMETER, FIELD})
@Retention(RUNTIME)
public @interface MotoDao {
}

同样的方式创建@CarDao注解:

import jakarta.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Qualifier
@Target({TYPE, METHOD, PARAMETER, FIELD})
@Retention(RUNTIME)
public @interface CarDao {
}

2. 在实现类上添加限定符注解

接下来,给你的MotoDao和CarDao实现类分别加上对应的限定符注解,同时别忘了添加@Singleton让Micronaut容器管理这些Bean:

@MotoDao
@Singleton
public class MotoDaoImpl implements VehicleDao {
    // 实现VehicleDao接口的方法
}
@CarDao
@Singleton
public class CarDaoImpl implements VehicleDao {
    // 实现VehicleDao接口的方法
}

3. 在VehicleHandler中注入多个实现

现在就可以完全按照你期望的方式,在构造函数中注入这两个实现了:

@Singleton
public class VehicleHandler {

    private final VehicleDao motoDao;
    private final VehicleDao carDao;

    @Inject
    public VehicleHandler(@MotoDao VehicleDao motoDao, @CarDao VehicleDao carDao) {
        this.motoDao = motoDao;
        this.carDao = carDao;
    }

    // 业务方法中可以分别调用两个Dao的逻辑
    public void processMotoData() {
        motoDao.someVehicleMethod();
    }

    public void processCarData() {
        carDao.someVehicleMethod();
    }
}

补充:快捷替代方案(用@Named)

如果你不想自定义注解,也可以用Micronaut自带的@Named限定符简化操作:

  • 实现类上标注:@Named("motoDao") 和 @Named("carDao")
  • 注入时:@Inject public VehicleHandler(@Named("motoDao") VehicleDao motoDao, @Named("carDao") VehicleDao carDao)

不过显然你更倾向于自定义注解的语义化方式,所以上面的自定义限定符方案更贴合你的需求。

内容的提问来源于stack exchange,提问作者Holm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:08:02