在春季使用泛型进行Bean注入

时间:2019-12-10 17:29:09

标签: java spring

我有一个卡车服务,其中包含根据特定卡车类型而定的truckLoader。

我没有在此类上使用@Service注释,因为如果类中包含泛型,spring不会为我生成bean:它不知道为TruckLoader类型注入什么。

当前,我使用config类生成这两个服务(请参见下文)。 我发现配置文件效率不高,我想找到另一种创建服务的方式。

当前代码:

public class TruckService<T extends Truck>{

private TruckLoader<T> truckLoader;

public TruckService(TruckLoader<T> truckLoader){
        this.truckLoader = truckLoader;
}

public T CheckTruckAndLoadTruck(T truck){
    check(truck);
    return truckLoader.load();
}

private check(T truck){
    //Do some generic checks on the truck
}

}
interface TruckLoader<T extends Truck>{
    void load(T truckToBeLoaded);
}

我使用以下配置文件创建每个TruckService:

@Config
public class TruckConfig{

    @Bean
    TruckService<BigTruck> bigTruckService(TruckLoader<BigTruck> bigTruckLoader) {
        return new TruckService<>(bigTruckLoader);
    }

    @Bean
    TruckService<SmallTruck> smallTruckService(TruckLoader<SmallTruck> smallTruckLoader) {
        return new TruckService<>(smallTruckLoader);
    }

}

这行得通,但是我发现侧面配置很脏。

我目前有两个主要想法:

  • 创建一个服务,以查找现有的所有大型卡车和小型卡车装载机,并从中生成所有卡车服务

  • 将配置分为两个单独的服务:

    @Service
    public class BigTruckService extends TruckService<BigTruck>{

      @Autowired
      private TruckService<BigTruck> truckService;

    }

    @Service
    public class SmallTruckService extends TruckService<SmallTruck>{

      @Autowired
      private TruckService<SmallTruck> truckService;
   }

有没有办法用较少的配置文件就可以做到这一点?

我使用spring bean 5.1.10.RELEASE和spring core 5.1.10.RELEASE和Java 1.8

0 个答案:

没有答案