关于java:我可以使用弹簧注入,注入枚举吗?

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

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
public enum Car {
HONDA("Honda","hondas") {
    @Inject
    Carparts carparts;

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

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

1
2
3
4
5
@Bean
@Singleton
public Carparts geCarparts() {
    return new Carparts();
}

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


您需要创建一个具有内部静态类的变通方法,该类将是一个弹簧组件,注入它并为整个Car EnumSet设置carparts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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不应该是枚举。它应该是一个列有carpartsenum的类,如CarTypeManufacturerType