There is one another approach you may like to explore. However instead of injecting a bean into enum it associates a bean with an enum 
Say you have an enum WidgetType and Widget class
public enum WidgetType {
  FOO, BAR;
}
public class Widget {
  WidgetType widgetType;
  String message;
  public Widget(WidgetType widgetType, String message) {
    this.widgetType = widgetType;
    this.message = message;
  }
}
And you want to create Widgets of this type using a Factory BarFactory or FooFactory
public interface AbstractWidgetFactory {
  Widget createWidget();
  WidgetType factoryFor();
}
@Component
public class BarFactory implements AbstractWidgetFactory {
  @Override
  public Widget createWidget() {
    return new Widget(BAR, "A Foo Widget");
  }
  @Override
  public WidgetType factoryFor() {
    return BAR;
  }
}
@Component
public class FooFactory implements AbstractWidgetFactory {
  @Override
  public Widget createWidget() {
    return new Widget(FOO, "A Foo Widget");
  }
  @Override
  public WidgetType factoryFor() {
    return FOO;
  }
}
The WidgetService is where most of the work happens. Here I have a simple AutoWired field which keeps tracks of all the registered WidgetFactories. As a postConstruct operation we create a map of the enum and the associated factory. 
Now clients could inject the WidgetService class and get the factory for the given enum type
@Service
public class WidgetService {
  @Autowired
  List<AbstractWidgetFactory> widgetFactories;
  Map<WidgetType, AbstractWidgetFactory> factoryMap = new HashMap<>();
  @PostConstruct
  public void init() {
    widgetFactories.forEach(w -> {
      factoryMap.put(w.factoryFor(), w);
    });
  }
  public Widget getWidgetOfType(WidgetType widgetType) {
    return factoryMap.get(widgetType).createWidget();
  }
}