代码之家  ›  专栏  ›  技术社区  ›  ASR4

我可以使用Spring注入来注入枚举吗?[副本]

  •  1
  • ASR4  · 技术社区  · 7 年前

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

    public enum Car {
    HONDA("Honda", "hondas") {
        @Inject
        Carparts carparts;
    
        @Override
        public List<Carpart> getCarparts() {
            return carparts.getCarpartsListings();
        }
    };
    //more logic here
    }
    

    我的carparts bean在配置类中定义如下:

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

    但不管我得到什么零值的腕关节注射。 任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   J-Alex Dorota Przeniosło    7 年前

    您需要使用一个内部静态类创建一个变通方法,该类将是一个Spring组件,注入它并设置 carparts 整体 Car EnumSet .

    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 不应该是枚举。它应该是一个列有 Carparts , enum 按类型 CarType ManufacturerType .