当前位置: 首页 > wzjs >正文

百度网站优化 件虚拟机中做网站

百度网站优化 件,虚拟机中做网站,创办网站需要怎么做,设计教育教学活动的注意事项Spring类型转换融入IOC生命周期 一,类型转换的处理时机对于Value注解的处理对于Bean的属性填充 二,将类型转换器加入到容器当中 源码见:mini-spring 要在 Spring 的 Bean 生命周期中融入类型转换功能,首先需要明确类型转换的适用场…

Spring类型转换融入IOC生命周期

    • 一,类型转换的处理时机
      • 对于Value注解的处理
      • 对于Bean的属性填充
    • 二,将类型转换器加入到容器当中

源码见:mini-spring

在这里插入图片描述

要在 Spring 的 Bean 生命周期中融入类型转换功能,首先需要明确类型转换的适用场景。Spring 主要在以下两个环节中需要进行类型转换:

  1. 处理 @Value 注解的属性赋值:将配置文件或注解中的值(如字符串)转换为目标字段的类型。
  2. 为 Bean 填充属性:在依赖注入时,确保注入的值与目标字段的类型匹配。

上一节已详细介绍了 Spring 如何实现属性占位符替换逻辑。本节将重点说明如何将类型转换功能集成到 Spring 的 IoC 容器中。

一,类型转换的处理时机

对于Value注解的处理

// 获取到当前类当中声明的所有属性  
Field[] declaredFields = beanClass.getDeclaredFields();  
for (Field field : declaredFields) {  // 获取到标记Value注解的属性  Value valueAnnotation = field.getAnnotation(Value.class);  if (valueAnnotation != null){  Object value = valueAnnotation.value();  // 解析Value的属性值,判断是否需要替换占位符  value = beanFactory.resolveEmbeddedValue((String) value);  Class<?> sourceClass = value.getClass();  Class<?> targetType = (Class<?>) TypeUtil.getType(field);  // 类型转换  ConversionService conversionService = beanFactory.getConversionService();  if (conversionService != null){  boolean canConvert = conversionService.canConvert(sourceClass, targetType);  if (canConvert){  value = conversionService.convert(value,targetType);  }  }  // 将解析完毕的字段添加到类属性当中  // BeanUtil.setFieldValue(bean,field.getName(),value);  pvs.addPropertyValue(new PropertyValue(field.getName(), value));  }  
}

在解析Value的属性值,判断是否需要替换占位符之后,我们需要判断当前该字段的类型(加入要注入的字段是Integer age,那么我们从配置文件读取后返回的必然是String类型,那么这里就需要尝试将String转为Integer),尝试执行转型。

具体的转换逻辑实际上也非常简单,先从容器当中获取到类型转换器,判断当前类型是否支持转换,如果支持则进行转换。

对于Bean的属性填充

// 如果是Bean引用,则获取对应的Bean实例  
if (value instanceof BeanReference){  BeanReference beanReference = (BeanReference) value;  value = super.getBean(beanReference.getBeanName());  
}else {  Class<?> sourceClass = value.getClass();  Class<?> targetType = (Class<?>) TypeUtil.getFieldType(bean.getClass(), name);  ConversionService conversionService = getConversionService();  if (conversionService != null) {  boolean canConvert = conversionService.canConvert(sourceClass, targetType);  if (canConvert) {  value = conversionService.convert(value, targetType);  }  }  
}

这里其实逻辑和上面的类似就不过多赘述了。

二,将类型转换器加入到容器当中

想要将类型转换器加入到容器当中需要在ApplicationContext的阶段进行处理

在这里需要判断BeanDefinition当中是否存在名为conversionService的类型转换器对象,如果存在则尝试获取并将该对象注入到BeanFactory当中

AbstractApplicationContext

public static final String CONVERSION_SERVICE_BEAN_NAME = "conversionService";//注册类型转换器和提前实例化单例bean  
finishBeanFactoryInitialization(beanFactory);
private void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {  if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME)) {  Object bean = beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME);  if ((bean instanceof ConversionService)){  beanFactory.setConversionService((ConversionService) bean);  }  }  // 提前初始化单列Bean  beanFactory.preInstantiateSingletons();  
}

逻辑说明:

  • Bean 检查:检查容器中是否存在名为 conversionService 的 Bean。
  • 类型验证:确认该 Bean 是 ConversionService 类型。
  • 注册:将 ConversionService 注入到 BeanFactory,供后续属性注入和 @Value 解析使用。

这里我们新添加一个方法用于处理添加类型转换器conversionService与实例化Bean

这里我们尝试加入到Spring当中的默认转化器如下,会通过构造方法将当前已有的转换器注入到容器当中,以便于后续的调用

@Component("conversionService")  
public class DefaultConversionService extends GenericConversionService{  public DefaultConversionService() {  addDefaultConverters(this);  }  private void addDefaultConverters(ConverterRegister converterRegister) {  converterRegister.addConverterFactory(new StringToNumberConverterFactory());  }  }

逻辑说明:

  • 默认转换器:DefaultConversionService 通过构造方法注册内置转换器,如 StringToNumberConverterFactory,支持字符串到数字(如 Integer、Double)的转换。
  • 扩展性:开发者可以通过 ConverterRegistry 添加自定义转换器,满足特定需求。
http://www.dtcms.com/wzjs/586574.html

相关文章:

  • 网站推广的方法和手段wordpress cx-udy
  • 响应式网站公司邢台建设局网站上中标公示查询
  • 企业网站类型有哪些西安网站建设iseeyu
  • 网站用花生壳nas做存储做网站按什么收费多少钱
  • 阿里巴巴建设网站ip网站怎么做
  • 品牌百度网站建设wordpress能做大型cms
  • 网站域名空间租用合同wordpress微云解析插件
  • dede新手做网站多久seo查询整站
  • 怎么做分享软件的网站设计方案评审
  • 做网站能注册账号的滨州做网站多少钱
  • 从化哪里做网站好做百度网站费用多少合适
  • 潍坊百度网站北京网站建设亿玛酷专注4
  • 试用网站源码网站开发 演讲
  • 外贸网站建设十大标准外贸网站建站上海专业的seo公司
  • html编辑器哪个软件好用上海搜索引擎优化公司
  • 南山做网站公司怎么选择前端网页代码
  • 网站开发的调研内容标签云 wordpress
  • 成都餐饮网站建设ppt模板百度云
  • 做进口产品的网站网络营销seo教程
  • 遵义公司建网站要多少费用医院网站怎么建设
  • 无锡新区建设环保局网站网站建设协议一百互联
  • 如何建立个人免费网站做创新方法工作的网站
  • 福建省住房和城乡建设厅的网站企业网站静态模板下载
  • 像网站分类一样的表格图怎么做长沙人才市场最新招聘
  • 织梦模仿网站视频一个微信小程序要多少钱
  • 佛山公司网站设计产品信息发布网站
  • 前端开发35岁以后干什么整站优化多少钱
  • 注册公司网站怎么收费做dnf辅助网站
  • 厦门专业做网站的公司网站建设 商业价值
  • 企业网站的优化做环保是跑还是网站卖