作者回复: 参考org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessBeforeInstantiation 方法中的: if (beanName != null) { TargetSource targetSource = getCustomTargetSource(beanClass, beanName); if (targetSource != null) { this.targetSourcedBeans.add(beanName); Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(beanClass, beanName, targetSource); Object proxy = createProxy(beanClass, beanName, specificInterceptors, targetSource); this.proxyTypes.put(cacheKey, proxy.getClass()); return proxy; } }
作者回复: Proxy 代理对象创建时,代理对象也实现类被代理对象的接口,那就意味着,比如当某个 Bean 实现 InitializatingBean 接口时,代理对象也被代理该接口,所以会直接调用目标 Bean 的 afterPropertiesSet() 方法,因此,达到了 Bean 的初始化效果。