работа с абстрактным классом Java

подскажите пожалуйста, как можно переписать этот код?

@Service
public class Manager {
    @Autowired
    private StorageOne one;
    @Autowired
    private StorageTwo two;

    public void save() {
       one.save();
       two.save();
    }
}

@Component
public class StorageOne {

    public void save() {
       ......
    }
}

@Component
public class StorageTwo {

    public void save() {
       ......
    }
}

я хочу в менаджере избавиться от

@Autowired
private StorageOne one;
@Autowired
private StorageTwo two;

public void save() {
   one.save();
   two.save();
}

и сделать, что то типо:

@Service
public class Manager {
  @Autowired
  private AbstrackStorage stor;

  public void save() {
   stor.save();
  }
}

что бы при вызове вот этого абстрактного класса, отрабатывали переопределенные методы в стораджах, возможно ли это?)


Ответы (1 шт):

Автор решения: Alexandr

Можно сделать так:

public interface Storage {

    void save();
}

@Component
public class StorageOne implements Storage {

    public void save() {
        ......
    }
}

@Component
public class StorageTwo implements Storage {

    public void save() {
        ......
    }
}

@Service
public class Manager {

    @Autowired
    private List<Storage> storages;

    public void save() {
        for (Storage storage : storages) {
            storage.save();
        }
    }
}
→ Ссылка