先看ProxyFactoryBean 核心的方法就是getObject()方法,我们来看一下源码:
public Object getObject() throws BeansException {
initializeAdvisorChain();
if (isSingleton()) {
return getSingletonInstance();
}
else {
if (this.targetName == null) {
logger.warn("Using non-singleton proxies with singleton targets is often undesirable. " +
"Enable prototype proxies by setting the 'targetName' property.");
}
return newPrototypeInstance();
}
}
在getObject()方法中,主要调用getSingletonInstance()和newPrototypeInstance();在Spring 的配置中,如果不做任何设置,那么Spring 代理生成的Bean 都是单例对象。如果修改scope 则每次创建一个新的原型对象。newPrototypeInstance()里面的逻辑比较复杂,我们后面的课程再做深入研究,这里我们先做简单的了解。
Spring 利用动态代理实现AOP 有两个非常重要的类,一个是JdkDynamicAopProxy 类和CglibAopProxy 类