Ответ заключается в том, что вы не должны использовать ApplicationContext.getBean () вообще, если это возможно, и иметь дело с одним местом, которое вам нужно в коде начальной загрузки. (Как правило, вам никогда не нужно использовать getBean () вне точек входа вашего приложения.)
Кроме того, то, что вы спрашиваете, вероятно, вообще невозможно на языке Java. Приведение является функцией времени компиляции в сочетании с проверкой во время выполнения. Тип возвращаемого значения getBean () просто должен быть известен во время компиляции. Даже если Spring может определить тип объекта, он не может изменять собственные сигнатуры методов во время выполнения.
Другое дело, что даже если бы это было возможно, эта функция не была бы такой полезной. Поскольку Spring AOP реализован с использованием динамических прокси, вы почти всегда хотите, чтобы Spring передавал вам экземпляр интерфейса, реализуемого компонентом (который может быть прокси AOP), а не класса реализации.