package com.mashibing;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyClassPathXmlApplicationContext extends ClassPathXmlApplicationContext {
public MyClassPathXmlApplicationContext(String... configLocations){
super(configLocations);
}
@Override
protected void initPropertySources() {
System.out.println("扩展initPropertySource");
getEnvironment().setRequiredProperties("userName");
}
@Override
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {
// super.setAllowBeanDefinitionOverriding(false);
// super.setAllowCircularReferences(false);
//dataSource解析
// super.addBeanFactoryPostProcessor(new MyBeanFactoryPostProcessor());
super.customizeBeanFactory(beanFactory);
}
@Override
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
System.out.println("扩展实现postProcessBeanFactory方法");
}
}
06 源码分析-spring自定义标签解析过程
需积分: 0 144 浏览量
更新于2022-06-19
收藏 10KB RAR 举报
在Spring框架中,自定义标签的解析过程是一个关键的组件,它使得开发者能够通过XML配置文件以更加直观和简洁的方式声明Bean的定义。本节将深入探讨Spring 5.2.9版本中自定义标签的解析机制,以及背后的源码实现。
Spring XML配置文件中的自定义标签是由Spring的`BeanDefinitionParser`接口处理的。这个接口定义了`parse()`方法,用于解析特定的XML元素并创建或更新`BeanDefinition`对象。`BeanDefinition`是Spring框架中表示一个Bean定义的核心数据结构,包含了Bean的所有属性、依赖关系和初始化方法等信息。
自定义标签的解析通常涉及到以下步骤:
1. **注册解析器**:Spring通过`BeanDefinitionReader`和`NamespaceHandler`来处理XML配置中的命名空间。当遇到一个新的命名空间时,Spring会查找对应的`NamespaceHandler`,该处理器负责为该命名空间下的每个自定义标签注册一个`BeanDefinitionParser`。
2. **解析标签**:在解析XML文件时,Spring的`DocumentReader`类会遇到自定义标签。这时,它会查找`NamespaceHandler`,并通过`NamespaceHandler`找到对应的`BeanDefinitionParser`来处理这个标签。
3. **调用解析方法**:`BeanDefinitionParser`的`parse()`方法会被调用,这个方法根据标签的内容创建或更新`BeanDefinition`对象。这一步可能会涉及解析属性、处理子元素,甚至可能调用其他的`BeanDefinitionParser`来处理嵌套的自定义标签。
4. **返回`BeanDefinition`**:`parse()`方法完成后,返回的`BeanDefinition`会被添加到`BeanDefinitionRegistry`中,这样Spring在启动时就能根据这些定义创建Bean实例。
5. **属性转换**:在解析过程中,Spring还会处理属性值的类型转换。例如,从字符串转换为整型、布尔型等。这是通过`PropertyEditor`机制实现的,Spring提供了多种内置的`PropertyEditor`,同时也支持自定义。
6. **依赖注入**:`BeanDefinition`还包含了依赖注入的信息,如属性、构造函数参数和集合类型的依赖。在解析过程中,这些依赖会被记录下来,以便在实例化Bean时进行注入。
在Spring 5.2.9版本中,`BeanDefinitionParser`的实现通常基于`AbstractSingleBeanDefinitionParser`或`AbstractBeanDefinitionParser`,这两个抽象类提供了一些便利的方法来简化解析过程。例如,`AbstractSingleBeanDefinitionParser`用于创建单个Bean的定义,而`AbstractBeanDefinitionParser`则适用于创建多个Bean的情况。
通过分析`spring-debug2`压缩包中的源码,我们可以更深入地理解这些概念和机制。源码中的类和方法会详细解释每个步骤的具体实现,包括如何注册解析器、如何解析标签、如何处理属性和依赖,以及如何生成`BeanDefinition`对象。通过阅读这些代码,开发者可以更好地掌握Spring框架的内部工作原理,从而更好地设计和实现自定义的标签解析器。

weixin_50750933
- 粉丝: 14
最新资源
- 脑电图分析.zip
- 涡轮喷气发动机和涡扇发动机的性能分析。.zip
- 使用 ode45 计算固体火箭发动机相对于时间的停滞压力.zip
- 双瑞利衰落信道上全双工放大前继的车对车通信性能分析.zip
- 湍流通道流的溶解分析.zip
- 线性预测编码对并发元音进行共振峰分析.zip
- 心电图在线分析.zip
- 异质多智能体系统固定时间一致性跟踪.zip
- 小型铝冰固体火箭发动机性能的分析仿真.zip
- 预测多层复合材料中贯穿厚度应力的实体壳单元.zip
- NCRE-计算机二级资源
- WeBlog-毕业设计资源
- Mathematical Modeling-美赛资源
- 《统计学习方法》及 GBDT 等常见机器学习模型的原理与 Python 类库实现讲解
- Machine Learning in Action [Peter Harrington] 机器学习实战, Python3
- 通过 Python 编程语言学习机器学习知识