招生网站建设策划方案,哪家公司做网站,英文网站建设报价,阿里云wordpress插件文章目录手写简易 Spring#xff08;二#xff09;1. 扩展 BeanFactory 接口2. 实现资源加载器#xff0c;从 Spring.xml 解析和注册 Bean 对象1. 核心实现类 XmlBeanDefinitionReader3. 实现应用上下文#xff0c;自动识别、资源加载、扩展机制1. 应用上下文2. 核心实现类…
文章目录手写简易 Spring二1. 扩展 BeanFactory 接口2. 实现资源加载器从 Spring.xml 解析和注册 Bean 对象1. 核心实现类 XmlBeanDefinitionReader3. 实现应用上下文自动识别、资源加载、扩展机制1. 应用上下文2. 核心实现类 ClassPathXmlApplicationContext3. Bean 实例化前后修改与扩展4. 我的代码结构1. 整体设计结构2. 我的调用类图模拟 Spring 源码3. 我的代码结构模拟 Spring 源码手写简易 Spring二
1. 扩展 BeanFactory 接口 接口 ConfigurableListableBeanFactory提供分析和修改 Bean 对象以及预先实例化的操作接口 接口 ListableBeanFactory扩展 BeanFactory 的接口提供了所有的 Bean 对象基本信息的方法接口 ConfigurableBeanFactory注册与获取 BeanPostProcessor、BeanClassLoader 等的一个配置化接口 接口 HierarchicalBeanFactory扩展了 BeanFactory提供了父容器访问功能的方法 接口 AutowireCapableBeanFactory扩展了 BeanFactory提供了自动装配、前、后处理器等接口可以使用这个接口集成其它框架 我的代码类图 2. 实现资源加载器从 Spring.xml 解析和注册 Bean 对象
1. 核心实现类 XmlBeanDefinitionReader 核心实现类 XmlBeanDefinitionReader解析 XML 文件、获取 Bean 配置以及配置中的 id、name、class、value、ref设置属性与注册 BeanDefinition 接口 BeanDefinitionReaderBeanDefinition 读取接口定义getRegistry()、getResourceLoader()与三个加载 BeanDefinition 的方法 实现类 DefaultResourceLoader资源加载器实现类通过策略模式外部传入地址即可获取对应 Resource而不用管具体那种流文件 接口 ResourceLoader资源加载器接口 接口 Resource处理资源加载流提供获取 InputStream 流的方法也可看做 classPath、FileSystem、URL 三种方式获取流的适配器 实现类 FileSystemResourceFileSystem 流文件获取数据实现类 ClassPathResourceClassPath 流文件获取数据实现类 UrlResourceUrl 流文件获取数据 我的代码类图 3. 实现应用上下文自动识别、资源加载、扩展机制
1. 应用上下文
应用上下文的一系列的流程 加载 XML注册 BeanDefinition修改定义BeanFactoryPostProcessor实例化属性填充初始化与扩展初始化BeanPostProcessor
2. 核心实现类 ClassPathXmlApplicationContext
接口 ApplicationContext继承了 ListableBeanFactory 接口即扩展了 BeanFactory 的功能是一个核心接口接口 ConfigurableApplicationContext继承了 ApplicationContext 接口定义了核心方法 refresh 方法、用于刷新容器抽象类 AbstractApplicationContext实现了 refresh、invokeBeanFactoryPostProcessors、registerBeanPostProcessors 方法定义了 refreshBeanFactory、getBeanFactory 方法 继承了 DefaultResourceLoader 类子类可用于加载 XML 文件实现了 ConfigurableApplicationContext 接口实现 refresh 方法 创建 BeanFactory加载 BeanDefinition获取 BeanFactory执行 BeanFactoryPostProcessor此时为 Bean 初始化之前注册 BeanPostProcessor此时为 Bean 初始化之前提前实例化单例 Bean 对象 抽象类 AbstractRefreshableApplicationContext继承了 AbstractApplicationContext 类创建与获取 DefaultListableBeanFactory、实现 refreshBeanFactory 方法定义 loadBeanDefinitions 方法抽象类 AbstractXMLApplicationContext继承了 AbstractRefreshableApplicationContext 类实现了 loadBeanDefinitions 方法定义了 getConfigLocations 方法核心实现类 ClassPathXmlApplicationContext继承了 AbstractXMLApplicationContext 类实现了 getConfigLocations 方法 具体对外提供应用上下文的核心类 核心抽象类 AbstractAutowireCapableBeanFactory增加实现 AutowireCapableBeanFactory 接口实现了 initializeBean 接口 initializeBean 接口执行 BeanPostProcessor 前置处理器方法、执行 invokeInitMethods 方法执行 BeanPostProcessor 后置处理器方法、返回覆盖 Bean 对象 核心实现类 DefaultListableBeanFactory增加实现了 ConfigurableListableBeanFactory 接口实现了 getBeansOfType、preInstantiateSingletons 方法 核心实现类 AbstractBeanFactory增加实现了 ConfigurableBeanFactory 接口实现了 addBeanPostProcessor 方法
3. Bean 实例化前后修改与扩展
BeanFactoryPostProcessor 接口BeanDefinition 注册后、初始化之前的操作可以修改 BeanDefinition 的信息BeanPostProcessor 接口每个 Bean 初始化前后均可操作可以扩展 Bean 功能甚至替换 Bean 对象与 AOP 有紧密联系
4. 我的代码结构
1. 整体设计结构 2. 我的调用类图模拟 Spring 源码 3. 我的代码结构模拟 Spring 源码
.
├── beans
│ ├── BeansException.java
│ ├── PropertyValue.java
│ ├── PropertyValues.java
│ └── factory
│ ├── BeanFactory.java
│ ├── HierarchicalBeanFactory.java
│ ├── ListableBeanFactory.java
│ ├── config
│ │ ├── AutowireCapableBeanFactory.java
│ │ ├── BeanDefinition.java
│ │ ├── BeanFactoryPostProcessor.java
│ │ ├── BeanPostProcessor.java
│ │ ├── BeanReference.java
│ │ ├── ConfigurableBeanFactory.java
│ │ ├── ConfigurableListableBeanFactory.java
│ │ └── SingletonBeanRegistry.java
│ ├── support
│ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ ├── AbstractBeanDefinitionReader.java
│ │ ├── AbstractBeanFactory.java
│ │ ├── BeanDefinitionReader.java
│ │ ├── BeanDefinitionRegistry.java
│ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ ├── DefaultListableBeanFactory.java
│ │ ├── DefaultSingletonBeanRegistry.java
│ │ ├── InstantiationStrategy.java
│ │ └── SimpleInstantiationStrategy.java
│ └── xml
│ └── XmlBeanDefinitionReader.java
├── context
│ ├── ApplicationContext.java
│ ├── ConfigurableApplicationContext.java
│ └── support
│ ├── AbstractApplicationContext.java
│ ├── AbstractRefreshableApplicationContext.java
│ ├── AbstractXMLApplicationContext.java
│ └── ClassPathXmlApplicationContext.java
├── core
│ └── io
│ ├── ClassPathResource.java
│ ├── DefaultResourceLoader.java
│ ├── FileSystemResource.java
│ ├── Resource.java
│ ├── ResourceLoader.java
│ └── UrlResource.java
└── utils├── ClassUtils.java└── StringUtils.java
.
├── ApiTest.java
├── bean
│ ├── UserController.java
│ ├── UserDao.java
│ └── UserService.java
└── common├── MyBean1FactoryPostProcessor.java├── MyBean1PostProcessor.java├── MyBean2FactoryPostProcessor.java└── MyBean2PostProcessor.java