【知识库】--spring 创建bean的实例-createBeanInstance方法解析(240)
来源:互联网 发布:linux找不到mysql命令 编辑:程序博客网 时间:2024/06/06 20:04
创建bean的实例
protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args){
//解析class
Class beanClass = resolveBeanClass(mbd, beanName);
if(beanClass!=null && !Modifier.isPublic(beanClass.getModifiers()) && !mbd.isNonPublicAccessAllowed()){
throw new BeanCreationException(//" Bean class is not public ,and no-public access not allowed");
}
//如果工厂方法不为空则使用工厂方法初始化策略
if(mbd.getFactoryMethodName()!=null){//配置了factory-method
return instantiateUsingFactoryMethod(beanName,mbd,args);
}
// 短路操作 re-creating the same bean...
boolean resolved = false;
boolean autowireNecessary = false;
if(args == null){
synchronized(mbd.constructorArgumentLock){
//一个类有多个构造函数,每个构造函数有不同的参数,所以调用前先根据参数锁定构造函数或对应的工厂方法
if(mbd.resolvedConstructorOrFactoryMethod != null){//缓存
resolved = true;
autowireNecessary = mbd.constructorArgumentsResolved;
}
}
}
//如果已经解析过则使用解析好的构造函数方法不需要锁定
if(resolved){
if(autowireNecessary){//构造函数自动注入
return autowireConstructor(beanName,mbd,null,null);
}
else{//使用默认构造函数
return instantiateBean(beanName,mbd);
}
}
//需要根据参数解析构造函数
Constructor[] ctors = determineConstuctorsFromBeanPostProcessors(beanClass,beanName);
if(actors != null || mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_CONSTRUCTOR ||
mbd.hasConstructorArgumentValues() || !ObjectUtils.isEmpty(args) ){
return autowireConstructor(beanName,mbd,ctors,args);//构造函数自动注入
}
//使用默认构造函数构造
return instantiateBean(beanName,mbd);
}
- 【知识库】--spring 创建bean的实例-createBeanInstance方法解析(240)
- 【知识库】--spring AbstractAutowireCapableBeanFactory 创建bean(240)
- 【知识库】--spring 记录创建bean(单例)的ObjectFactory(240)
- Spring创建Bean实例的三种方法
- 【知识库】--spring --bean的加载简介(226)
- Spring Bean工厂创建Bean实例的方法之使用构造器
- Spring Bean工厂创建Bean实例的方法之使用静态工厂类
- Spring Bean工厂创建Bean实例的方法之使用工厂类
- Spring IOC 创建bean实例的方式
- Spring通过FactoryBean创建bean的实例
- spring MethodInvokingFactoryBean 的使用和了解,Spring 通过通过方法创建Bean的实例
- spring中三种实例化bean的方法
- 通过Bean工厂创建bean实例的几种方法
- 【spring NOTE】调用实例工厂方法创建Bean
- Spring使用实例工厂方法创建Bean(一)
- spring-在普通类中创建spring的bean实例
- Spring管理Bean的生命周期,Spring创建的Bean是单实例还是多实例?
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- Codeforces 313D Ilya and Roads【Dp+思维】
- Springmvc第二讲学习笔记,文件上传
- SaltStack-02Haproxy以及Keepalived配置
- 机器学习:决策树算法
- Win10高分屏软件界面字体模糊问题解决
- 【知识库】--spring 创建bean的实例-createBeanInstance方法解析(240)
- 循环冗余校验----CRC校验
- netty超时任务优化
- CentOS7下安装redis3.2.9
- 谁会留下换行符?
- gulp工具的使用
- Python设计模式-外观模式
- C#接口的显示实现和隐式实现
- Hdu 4695 线性递推模版(m^2logn)