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

建设政府网站多少钱百度网站推广怎么做

建设政府网站多少钱,百度网站推广怎么做,课程设计做淘宝网站的目的,wordpress 调取缩略图Spring 源码解读(二)——BeanDefinition 核心原则: 不要深究:理解即可,细节不必深究。基本准则: 接口:定义能力。抽象类:定义可复用、可重用的代码。 BeanDefinition 继承关系 Bean…

Spring 源码解读(二)——BeanDefinition

image-20250223183309171

核心原则

  • 不要深究:理解即可,细节不必深究。
  • 基本准则
    • 接口:定义能力。
    • 抽象类:定义可复用、可重用的代码。

BeanDefinition 继承关系

BeanDefinition 继承关系


BeanDefinition 的作用

翻译自源码文档
BeanDefinition 描述了一个 Bean 实例,包含属性值、构造函数参数值以及由具体实现提供的更多信息。

BeanDefinition 示例


核心点解析

  1. 最终转换为 RootDefinition
    例如,GenericBeanDefinition(Spring 2.5 引入)是通过 XML 配置读取的,最终会转换为 RootBeanDefinition

  2. 抽象类 AbstractBeanDefinition
    其中定义了通用的成员变量,子类会继承这些变量。

    AbstractBeanDefinition 示例

  3. RootBeanDefinition 的特殊性
    RootBeanDefinition 中,getParent() 方法返回 null


代码测试

以下是一个简单的测试代码,演示如何创建和配置 GenericBeanDefinition

@Test
public void test() throws IntrospectionException {// 创建 GenericBeanDefinitionGenericBeanDefinition beanDefinition = new GenericBeanDefinition();beanDefinition.setBeanClassName("com.lucifer.User");beanDefinition.setLazyInit(false);// 设置属性值MutablePropertyValues propertyValues = new MutablePropertyValues();propertyValues.add("name", "lucifer");propertyValues.add("age", 18);beanDefinition.setPropertyValues(propertyValues);System.out.println(beanDefinition);
}

从xml中获取bean的过程

1. 整体流程概述

从 XML 中获取 Bean 的过程可以分为以下几个步骤:

  1. 加载 XML 配置文件:读取 XML 文件并解析为 Document 对象。
  2. 解析 Bean 定义:将 XML 中的 <bean> 标签解析为 BeanDefinition
  3. 注册 Bean 定义:将 BeanDefinition 注册到 BeanFactory 中。
  4. 实例化 Bean:根据 BeanDefinition 创建 Bean 实例。
  5. 依赖注入:为 Bean 注入所需的依赖。

2. 源码解析

2.1 加载 XML 配置文件

Spring 通过 XmlBeanDefinitionReader 类加载 XML 配置文件,并将其解析为 Document 对象。

// XmlBeanDefinitionReader.java
public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {return loadBeanDefinitions(new EncodedResource(resource));
}
  • Resource:表示 XML 文件的资源对象。
  • EncodedResource:对资源进行编码处理。
2.2 解析 Bean 定义

Spring 使用 DefaultBeanDefinitionDocumentReader 解析 XML 文件中的 <bean> 标签。

// DefaultBeanDefinitionDocumentReader.java
protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {if (delegate.isDefaultNamespace(root)) {NodeList nl = root.getChildNodes();for (int i = 0; i < nl.getLength(); i++) {Node node = nl.item(i);if (node instanceof Element) {Element ele = (Element) node;if (delegate.isDefaultNamespace(ele)) {parseDefaultElement(ele, delegate); // 解析默认元素(如 <bean>)} else {delegate.parseCustomElement(ele); // 解析自定义元素}}}} else {delegate.parseCustomElement(root); // 解析自定义元素}
}
  • parseDefaultElement:解析 <bean> 标签。
  • parseCustomElement:解析自定义标签(如 <context:component-scan>)。
2.3 注册 Bean 定义

解析后的 BeanDefinition 会被注册到 DefaultListableBeanFactory 中。

// DefaultListableBeanFactory.java
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException {this.beanDefinitionMap.put(beanName, beanDefinition);this.beanDefinitionNames.add(beanName);
}
  • beanDefinitionMap:存储 Bean 名称与 BeanDefinition 的映射。
  • beanDefinitionNames:存储所有 Bean 的名称。
2.4 实例化 Bean

Spring 通过 AbstractBeanFactorygetBean 方法实例化 Bean。

// AbstractBeanFactory.java
public Object getBean(String name) throws BeansException {return doGetBean(name, null, null, false);
}
  • doGetBean:核心方法,负责 Bean 的实例化和依赖注入。
2.5 依赖注入

Spring 通过 AbstractAutowireCapableBeanFactory 完成依赖注入。

// AbstractAutowireCapableBeanFactory.java
protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) {// 注入属性值if (mbd.getPropertyValues() != null) {applyPropertyValues(beanName, mbd, bw, mbd.getPropertyValues());}
}
  • applyPropertyValues:将属性值注入到 Bean 中。

3. 代码示例

以下是一个简单的 XML 配置文件示例:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="user" class="com.example.User"><property name="name" value="John"/><property name="age" value="30"/></bean>
</beans>

运行 HTML

3.1 加载 XML 配置文件
ClassPathResource resource = new ClassPathResource("applicationContext.xml");
XmlBeanFactory beanFactory = new XmlBeanFactory(resource);
3.2 获取 Bean 实例
User user = (User) beanFactory.getBean("user");
System.out.println(user.getName()); // 输出: John
System.out.println(user.getAge());  // 输出: 30

4. 关键类解析

类名作用
XmlBeanDefinitionReader读取 XML 配置文件并解析为 BeanDefinition
DefaultBeanDefinitionDocumentReader解析 XML 文件中的 <bean> 标签。
DefaultListableBeanFactory存储和管理 BeanDefinition
AbstractBeanFactory提供 getBean 方法,负责 Bean 的实例化和依赖注入。
AbstractAutowireCapableBeanFactory实现 Bean 的依赖注入逻辑。

5. 总结

从 XML 中获取 Bean 的过程可以分为以下几个步骤:

  1. 加载 XML 配置文件:通过 XmlBeanDefinitionReader 读取 XML 文件。
  2. 解析 Bean 定义:将 <bean> 标签解析为 BeanDefinition
  3. 注册 Bean 定义:将 BeanDefinition 注册到 BeanFactory 中。
  4. 实例化 Bean:通过 getBean 方法创建 Bean 实例。
  5. 依赖注入:将属性值注入到 Bean 中。
http://www.dtcms.com/wzjs/30139.html

相关文章:

  • 网站开发如何共用菜单栏百度刷排名seo软件
  • 学校网站建设培训方案网络营销薪酬公司
  • 正规网站建设官网泸州网站优化推广
  • 橙子建站落地页制作建网站需要哪些步骤
  • 我想学编程优化搜索曝光次数的方法
  • 中国建设银行网站首页 定投seo标签优化方法
  • 大连市建设局网站免费seo在线工具
  • 北京做网站的人免费引流推广工具
  • 槐荫区城乡建设委员会网站如何做百度免费推广
  • 福州网站制作有限公司360收录批量查询
  • 做装修的有那些网站免费百度广告怎么投放
  • 如何自己做网站赚钱最近国际新闻
  • 品牌企业网站建设公司中国北京出啥大事了
  • 现在的网站使用frameset做吗优化一个网站需要多少钱
  • 宣城网站建设新站点seo联系方式
  • 网站的新闻模块怎么做产品营销策划
  • 武汉做网站比较好的公司公司网站制作教程
  • 网站动画广告条怎么做的西安百度公司
  • 网页编辑器绿色版短视频seo搜索优化
  • 软件公司门户网站模板百度指数是免费的吗
  • 株洲企业网站建设费用大型网站建设公司
  • 温州市城乡建设厅网站百度快速排名平台
  • 网站前台如何做访问量显示app推广平台
  • 青岛网站制作公司哪家正规阐述网络营销策略的内容
  • 做php门户网站那个系统好某网站seo策划方案
  • 网站设计能出来什么怎么开发自己的网站
  • wordpress文章目录修改seo搜索引擎实战详解
  • 做网站图片如何不转下一行网络营销策划ppt范例
  • 淘宝做网站 评价话语浅谈一下网络营销的几个误区
  • wordpress页脚怎么修改郑州百度seo关键词