Я пытаюсь понять, могу ли я совместить отражение с введением зависимости от пружины следующим образом:
public interface ClientCommand {
public void execute(...);
public static enum Command {
SomeCommand(SomeCommand.class);
private Class<? extends ClientCommand> clazz;
private Command(Class<? extends ClientCommand> clazz) {
this.clazz = clazz;
}
public Class<? extends ClientCommand> getClazz() {
return clazz;
}
public static ClientCommand getClientCommand(String name) {
Command command = Enum.valueOf(Command.class, name);
return command.getClazz().newInstance();
}
}
}
Это создаст экземпляр класса команды на основе имени, переданного в getClientCommand. Это пример класса, расширяющего ClientCommand:
public class LoginCommand implements ClientCommand {
@Autowired
private UserRepository userRepository;
public void setUserRepository(@Qualifier("userRepository")UserRepository userRepository) {
this.userRepository = userRepository;
}
public void execute(...) {
...
}
}
И репозиторий имеет вид:
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository {
....
}
Когда выполняется метод LoginCommand.execute(), то UserRepository равен нулю. Если я использую newInstance() для создания объекта, то будет ли пружина вообще заботиться о впрыске зависимостей? Больше, чем для практического использования, это понять, возможно ли теоретически заставить этот код работать. Заранее спасибо