当前位置: 首页 > 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/278593.html

相关文章:

  • 廊坊做网站外包网络营销方案设计范文
  • 百姓网免费招聘信息seo品牌优化百度资源网站推广关键词排名
  • 做网站一个月20万泰安网站建设优化
  • 驻马店行业网站建设源码百度一下 你知道首页
  • 学校集约网站建设销售平台有哪些
  • 大连筑成建设集团有限公司网站微信营销方法
  • wordpress全屏广告插件seo的中文是什么
  • 北京市城乡建设委官方网站多合一seo插件破解版
  • 建手机网站报价互联网营销成功案例
  • vps打开网站很慢武汉百度推广外包
  • 网站建设实训不足短视频营销推广方式
  • 公司网站建立的建议如何设计企业网站
  • 郑州app开发 丁seo优化教程自学网
  • 可以找酒店案例的网站windows优化大师可靠吗
  • 引迈快速开发平台广州王牌seo
  • 怎样做自己的销售网站长春网站制作计划
  • 怎么在网上卖东西到国外山东seo推广
  • 网站建设如何工作怎么查询百度收录情况
  • 网站制作二维码河北seo基础
  • 二手网站建设目标网页代码模板
  • 网站做排名2015广州seo全网营销
  • b2b外贸网站建站近期新闻热点大事件
  • 玉林建设工程信息网站新的营销方式有哪些
  • 用vs做html网站廊坊seo管理
  • 如何做导航网站十大嵌入式培训机构
  • led外贸网站制作成功的网络营销案例有哪些
  • cdr做网站分辨率5118营销大数据
  • 网站天天做收录有效果吗seo网站优化方法
  • 网站建设 深圳信科公司数据分析师培训需要多少钱
  • 视频拍摄方法有哪些网站优化推广怎么做