Вы пытаетесь получить прокси-компонент только из-за ClassCastException
? Если бы вы могли сыграть на Bar
, были бы вы довольны этим?
Когда Spring создает прокси, он проверяет, реализует ли класс бина какие-либо интерфейсы. Если это так, то сгенерированный прокси также будет реализовывать эти интерфейсы, но не будет расширять класс целевого компонента. Это делается с использованием стандарта java.lang.reflect.Proxy
. Это похоже на ваш пример.
Если класс целевого бина не реализует никаких интерфейсов, то Spring будет использовать CGLIB для генерации прокси-класса, который является подклассом класса целевого бина. Это своего рода мера остановки для проксирования неинтерфейсных компонентов.
Вы можете заставить Spring всегда проксировать целевой класс, но то, как вы это сделаете, зависит от того, как вы создали прокси Bar
для начала, и вы не сказали нам этого.
Обычно предпочтительным решением является обращение к прокси-компонентам по их интерфейсам, и все работает хорошо. Если ваш класс Bar реализует интерфейсы, может ли Foo
не ссылаться на этот интерфейс?