查看到这里就有些迷惑
直接省略了类名和方法名,一时不容易反应过来
sharedInstance = getSingleton(beanName, () -> {
try {
return createBean(beanName, mbd, args);//创建代理对象,也可能是非代理
}
catch (BeansException ex) {
// Explicitly remove instance from singleton cache: It might have been put there
// eagerly by the creation process, to allow for circular reference resolution.
// Also remove any beans that received a temporary reference to the bean.
destroySingleton(beanName);
throw ex;
}
});
这里看起来容易让人迷惑其实是创建了一个对象作为参数传进去了
其实可以用另一种方式写出来 ,这两种方式执行起来是等价的
ObjectFactory objectFactory = new ObjectFactory() {
@Override
public Object getObject() throws BeansException {
try {
return createBean(beanName, mbd, args);//创建代理对象,也可能是非代理
}
catch (BeansException ex) {
// Explicitly remove instance from singleton cache: It might have been put there
// eagerly by the creation process, to allow for circular reference resolution.
// Also remove any beans that received a temporary reference to the bean.
destroySingleton(beanName);
throw ex;
}
}
};
sharedInstance = getSingleton(beanName, objectFactory);