我正在尝试使用Enum实现策略模式,但是我需要Service来处理我的每项任务。我试图将服务自动添加到Enum中,但它不起作用。 我搜索了一下“如何将豆子注入到枚举中”,然后出现了answer(但对我来说看起来并不优雅)。
我现在不愿意继续,因为我不知道这是否是一个好方法。我们是否有针对这种要求的面糊设计?
public enum TaskType {
CREATE_MATERIAL{
@Override
public void handleTask(ScheduledEvent scheduledEvent) {
service.createMaterial(scheduledEvent);
}
};
@Autowired
private static AService service;
public abstract void handleTask(ScheduledEvent scheduledEvent);
}
答案 0 :(得分:1)
您不能自动连接enum
,因为枚举是Java运行时创建的常量,因此不能是Spring管理的bean。
您需要将任何必需的值作为参数传递给方法。
public enum TaskType {
CREATE_MATERIAL{
@Override
public void handleTask(AService service, ScheduledEvent scheduledEvent) {
service.createMaterial(scheduledEvent);
}
};
public abstract void handleTask(AService service, ScheduledEvent scheduledEvent);
}
如果不同的策略需要调用不同的服务,请停止使用enum
。
public interface TaskType {
public abstract void handleTask(AService service, ScheduledEvent scheduledEvent);
}
@Component
public class CreateMaterial implements TaskType {
@Autowired
private static AService service;
@Override
public void handleTask(ScheduledEvent scheduledEvent) {
service.createMaterial(scheduledEvent);
}
};