bean工厂
BranFactory:spring体系底层工厂,定义工厂的基本操作
HierarchicalBeanFactory:父子容器的管理
AutowireCapableBeanFactory:自动注入的能力包含 initializeBean destroyBean
ListableBeanFactory:获取相关的配置信息
getBeanDefinitionNames:返回所有bean名称
containsBeanDefinition:是否存在bean
ConfigurableBeanFactory:可配置工厂
addBeanPostProcessor:添加一个新的BeanPostProcessor,它将应用于这个工厂创建的bean。在工厂配置期间调用 注册后处理器
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b1fec065862cb9deb4bad1d823da1885.png)
读取xml配置
Resource:从底层资源(如文件或类路径资源)的实际类型抽象出来的资源描述符的接口。
UrlResource:可以从网络读取配置文件
ClassPathResource:读取classpath下的文件
BeanDefinition:BeanDefinition描述一个bean实例,该实例具有属性值、构造函数参数值以及由具体实现提供的进一步信息。 这只是一个最小的接口:主要目的是允许BeanFactoryPostProcessor自省和修改属性值和其他bean元数据。
setBeanClassName:指定此bean定义的bean类名。 类名可以在bean工厂后处理期间修改,通常用解析后的类名替换原始的类名。
setScope:重写此bean的目标作用域,指定一个新的作用域名称。
setLazyInit:设置该bean是否应该懒加载。 如果为false, bean将在启动时由执行单例初始化的bean工厂实例化
setDependsOn:设置初始化此bean所依赖的bean的名称。bean工厂将保证首先初始化这些bean。
setPrimary:设置此bean是否为主要自动候选对象。如果在多个匹配的候选对象中只有一个bean的值为真,那么它将作为首选
setInitMethodName:设置初始化方法的名称
setDestroyMethodName:设置销毁方法的名称
![02_](https://i-blog.csdnimg.cn/blog_migrate/7e96a853c74b9fb5243b65ae3f379c4d.png)
代码示例
XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
User user = (User)xmlBeanFactory.getBean("user");
System.out.println(user);
XmlBeanDefinitionReader: 对xml进行解析 将数据封装到 beanDefinition
DefaultListableBeanFactory :beanFacctory的子类
正式解析xml bean标签
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2d7ea78fa2afb9f113ca3b1ea0bdecd7.png)
(1)解析xml bean标签信息封装BeanDefinition
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ab24c148381f1f449bd90e687aed7c43.png)
(2)解析好的BeanDefinition注册存储
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5def6bb80093199e39424e4f298502c9.png)
调用 DefaultListableBeanFactory的 registerBeanDefinition 方法
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
private volatile List<String> beanDefinitionNames = new ArrayList<>(256);
this.beanDefinitionMap.put(beanName, beanDefinition);
this.beanDefinitionNames.add(beanName);
至此完成解析
此时BeanFactory 已经获取到bean的配置。解析xml完成。
下一步进行对象的创建。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d46d5fc92175ce7087b81eb8ea4fbd5c.png)