• fullmoon
    2021-03-31
    小马哥,默认情况下 TargetSourceCreator 数组为空,什么情况或者哪个框架会设置 TargetSourceCreator 对象呢?

    作者回复: 参考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; } }

    
    1
  • 姑射仙人
    2021-08-19
    AOP在实例化之前,就创建了Proxy代理,然后return,而且IOC在创建Bean之前就去resolveBeforeInstantiation。那么后续的初始化赋值等操作,在哪里做的呢?

    作者回复: Proxy 代理对象创建时,代理对象也实现类被代理对象的接口,那就意味着,比如当某个 Bean 实现 InitializatingBean 接口时,代理对象也被代理该接口,所以会直接调用目标 Bean 的 afterPropertiesSet() 方法,因此,达到了 Bean 的初始化效果。

    
    