……
}
1 从getBean()方法开始
让我们从改进getBean() 方法开始。
@覆盖
公共对象getBean(String beanName) {
GPBeanDefinition beanDefinition=super.beanDefinitionMap.get(beanName);
尝试{
//生成通知事件
GPBeanPostProcessor beanPostProcessor=new GPBeanPostProcessor();
对象实例=instantiateBean(beanDefinition);
if(null==实例){ 返回null;}
//初始化实例前调用一次
beanPostProcessor.postProcessBeforeInitialization(实例,beanName);
GPBeanWrapper beanWrapper=new GPBeanWrapper(实例);
this.factoryBeanInstanceCache.put(beanName,beanWrapper);
//实例初始化后调用一次
beanPostProcessor.postProcessAfterInitialization(实例,beanName);
PopulateBean(BeanName, 实例);
//这样调用就和给我们一样
这是一个必看的视频!获取2024年最新全套Java开发学习资料
有回旋余地
返回this.factoryBeanInstanceCache.get(beanName).getWrappedInstance();
}catch(异常e){
//e.printStackTrace();
返回空值。
}
}
2 instantiateBean()方法体现了实例的创建
//传递BeanDefinition 并返回实例bean
私有对象instantiateBean(GPBeanDefinition beanDefinition){
对象实例=空;
String 类名=beanDefinition.getBeanClassName();
尝试{
//因为只有类才能判断一个类是否有实例
if(this.factoryBeanObjectCache.containsKey(className)){
实例=this.factoryBeanObjectCache.get(类名);
}除此之外{
Class?clazz=Class.forName(类名);
实例=clazz.newInstance();
this.factoryBeanObjectCache.put(beanDefinition.getFactoryBeanName(),instance);
}
返回实例。
}catch(异常e){
e.printStackTrace();
}
返回空值。
}
3 PopulateBean()方法完成依赖注入
私有无效PopulateBean(String beanName,对象实例){
类clazz=instance.getClass();
if(!(clazz.isAnnotationPresent(GPController.class) ||
clazz.isAnnotationPresent(GPService.class))){
返回;
}
字段[] 字段=clazz.getDeclaredFields();
for(字段字段:字段){
if (!field.isAnnotationPresent(GPAutowired.class)){ 继续}
GPAutowired autowired=field.getAnnotation(GPAutowired.class);
String autowiredBeanName=autowired.value().trim();
if(\”\”.equals(autowiredBeanName)){
autowiredBeanName=field.getType().getName();
}
字段.setAccessible(true);
尝试{
field.set(实例,this.factoryBeanInstanceCache.get(autowiredBeanName).getWrappedInstance());
} catch (IllegalAccessException e) {
//e.printStackTrace();
}
}
}
面试题总结
其他面试题(springboot、mybatis、并发、Java中高级面试概述等)
//e.printStackTrace();
}
}
}
面试题总结
其他面试题(springboot、mybatis、并发、Java中高级面试概述等)
[外部链接图像正在传输.(img-azOwU9YU-1720155911893)]
[外部链接图像正在传输.(img-j7zAgfjB-1720155911894)]
[外部链接图像正在传输.(img-K6rrPvrr-1720155911894)]
以上#30手写Spring依赖注入特性核心原理(三)和2024年最新10道经典面试题的信息摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93150.html