Да, это выполнимо, и это называется ткачеством во время загрузки. По сути, вам нужно будет определить свой собственный ClassLoader, который будет решать в каждом конкретном случае, нужно ли модифицировать файл класса, который предназначен для загрузки; это означает, что вам нужно будет проверить загружаемый двоичный класс, возможно изменить его, а затем передать его JVM для определения / разрешения. Это немного громоздко, сложно и склонно к ClassCastExceptions (один и тот же класс, определенный в 2 разных загрузчиках классов, даст 2 разных класса, которые не совместимы с присвоением).
Обратите внимание, что ткачество позволяет вам делать гораздо больше: вы можете добавлять новые методы, интерфейсы, поля, изменять код существующих классов и многое другое.
Уже есть инструменты, которые могут вам помочь - смотрите, например, AspectJ как полноценную модификацию языка или что-то вроде BCEL или javassist, который позволяет вам писать такие инструменты для плетения.