我可以使用 spring 注入来注入枚举吗?

Can I use spring injection, for injecting into an enum?

我正在尝试使用 spring 注入来注入枚举。像这样:

public enum Car {
HONDA("Honda", "hondas") {
    @Inject
    Carparts carparts;

    @Override
    public List<Carpart> getCarparts() {
        return carparts.getCarpartsListings();
    }
};
//more logic here
}

我的Carparts bean在配置中定义如下class:

@Bean
@Singleton
public Carparts geCarparts() {
    return new Carparts();
}

但无论我得到的是什么,汽车零件注入都是空值。 任何帮助将不胜感激。

您需要创建一个内部静态 class 的解决方法,它将是一个 Spring 组件,注入它并为整个 Car EnumSet 设置 carparts

public enum Car {
    private Carparts carparts;

    @Component
    public static class CarPartsInjector {
        @Inject
        private Carparts carparts;

        @PostConstruct
        public void construct() {
            for (Car car: EnumSet.allOf(Car.class))
               car.setCarparts(carparts);
        }

        private void setCarparts(Carparts carparts) {
            this.carparts = carparts;
        }
    //...

}

总的来说,我认为这不是一个合适的解决方案。

这里的问题是数据模型

Car 不应该是枚举。它应该是一个 class,带有 Carpartsenum 的列表,类型如 CarTypeManufacturerType