我可以使用 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,带有 Carparts
、enum
的列表,类型如 CarType
或 ManufacturerType
。
我正在尝试使用 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,带有 Carparts
、enum
的列表,类型如 CarType
或 ManufacturerType
。