Spring加载注解和配置文件概述
- Spring容器实际上就是很多的Map组成的
- 配置文件的加载过程
通过IO流将XML读取到内存,dom4j解析成document,获取到node节点之后,取出key和value,放到具体的对象中去。
- 注解的加载过程
注解通过反射的方式,获取到Class对象,通过调用Class对象的getAnnotation解析,如果加了@Component、@Service等,就将它创建对象
无论是注解还是XML,解析完成之后都会变成一个BeanDefinition(Bean的定义信息,例如id,class这些)
,放到一个BeanDefinitionMap中去。
Spring源码的扩展性
在创建对象的时候应该有一个接口,因为我们还可以通过properties、json、yaml等形式来创建对象,我们可以通过这个接口来定义这些文件的解析规范。
这样我们只要实现了这个接口,我们就可以用不同格式的配置文件来创建对象了。
这个接口就是BeanDefinitionReader,它是用来读取我们的Bean对象的。同样我们就可以根据它写一个XmlBeanDefinitionReader、JsonBeanDefinitionReader、PropertiesBeanDefinitionReader
反射效率低的问题
当创建的对象非常非常多
的时候,反射的效率才低,我们一般使用没有任何问题
在创建对象dataSource
的时候,value的值全部是引用的db.properties文件中的,此时它是包含在BeanDefintion
的,但是需要在创建对象的之前替换成真实的值
的。
BeanFactory是访问容器的根接口,所以它是可以修改容器的内容的。
所以可以通过BeanFactory对BeanDefintion
来进行修改,BeanFactory中有一个额外的扩展接口就是BeanFactoryPostProcessor
,可以通过它(具体来说是通过它的实现类)来进行一个修改。
- 后置处理器又叫增强器
生活变成了纯粹的耐力问题,以及和绝望对抗的心理问题。
当时我妈结果出来了,我们这些子女可能还有些幻想,她不会发展得那么快。我见过很多高龄的知识分子,有的人90多岁,头脑非常清楚。人到这个时候就会产生一种对于公平感的质疑,很自然地就会想,这事不公平。为什么轮到了我?你无法用因果关系来解释这个事情。
她的脑子似乎有某种怪物,日复一日地蚕食她的记忆。与此同时,她的词汇量越来越少,由一个能够很清晰地表达自己的人,慢慢地变成了一个对于任何事情都无法表达的人。我女儿形容说,奶奶的大脑就像被虫子吃了一样。你看着这个过程一点一点走,心里是非常痛的。
https://baijiahao.baidu.com/s?id=1795912177129418680&wfr=spider&for=pc