在使用 AOP 进行编程时,我们通常会将目标对象和代理对象都注册到容器中。当我们通过接口的方式获取 bean 时,实际上是获取到了代理对象,因为这个代理对象实现了目标对象所实现的接口,以此对外提供服务。
Spring 框架使用动态代理技术来实现 AOP,在运行时生成代理类。在 Spring 中,BeanFactory 负责管理 Bean(即目标对象),而 ProxyFactoryBean 负责创建代理对象。当我们通过 getBean 获取一个 Bean 时,如果这个 Bean 是一个代理对象,那么容器会返回该代理对象;如果这个 Bean 不是代理对象,则直接返回目标对象。
因此,无论是通过接口还是通过目标对象名字来获取 Bean,只要这个 Bean 在容器中被注册为代理对象,就会返回该代理对象。