30个类手写Spring核心原理之依赖注入功能(3),2024年最新十道经典面试题

30个类手写Spring核心原理之依赖注入功能(3),2024年最新十道经典面试题…
}
1 从getBean()方法开始 下面我们从完善getBean()方法开始:
Override
public Object ge

……

}

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

(0)
CSDN的头像CSDN
上一篇 2024年7月5日
下一篇 2024年7月5日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注