| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> spring底层核心原理详解 -> 正文阅读 |
|
[Java知识库]spring底层核心原理详解 |
spring核心概念详解
一,spring底层架构核心概念1,BeanDefinition表示bean定义。所有可以注入spring容器的对象,在注入过程中都会先生成一个beanDefinition,如直接在配置文件中写一个bean标签,也可以通过这种注解@Component,@Value,@Configuration,@Import,@Bean等生成一个bean。 在BeanDefinition的定义中,可以解析一些注解,比如bean的作用域,是懒加载等。
2,BeanDefinitionReadbeanDefinition的一个读取器,主要有AnnotatedBeanDefinitionReader和XmlBeanDefinitionRead两种读取器。主要是去读取context上下文里面的一些类,并会对类上面的一些注解进行解析和读取,如一些@Conditional,@Scope,@Lazy等
3,BeanDefinitionScanner会对这个beanDefinitionRead读取到的东西进行扫描,扫描某个包路径,对扫描到的类进行解析。比如,扫描到的类上如果存在@Component注解,那么就会把这个类解析为一个BeanDefinition。不是所有的beanDefinitionRead读取到的配置类都是有效的,因此需要进一步的扫描来获取具体的有效的配置类bean
4,BeanDefinitionRegister会将上面扫描的有效的配置类进行一个注册,注册完成之后就生成一个BeanDefinition,最后将这个BeanDefinition存放在一个BeanDefinitionMap里面。 5,BeanDefinitionMap在生成完BeanDefinition之后,不会立马交给bean工厂进行加载,而是会先加入到这个BeanDefinitionMap里面,最后将BeanDefinitionMap交给BeanFactory进行bean的加载。 6,BeanFactory它是一个bean工厂的一个父接口,主要职责就是用来生产bean,通过调用getBean的这个方法,实现bean的实例化,属性填充,初始化等一系列操作。并且ApplicationContext也是BeanFactory的一种,ApplicationContext继承了这个BeanFactory,因此这个ApplicationContext的功能比这个BeanFactory更加强大。 无论是创建bean还是获取bean,都是通过这个getBean()的这个方法来实现的 7,ApplicationContextapplicationContext也是一个接口,继承了这个BeanFactory,可以用来加载上下文的资源,获取运行时的一些环境属性,国际化,事件发布等。主要有两个实现类,分别是解析接口的AnnotationConfigApplicationContext和解析xml配置文件的这个ClassPathXmlApplicationContext。
8,ApplicationContext和BeanFactory区别1,都有生产bean对象的能力 2,applicationContext可以去指定配置类,直接去扫描就好,实现了扫描器,读取器,监听事件等,可以更好地服务类,而bean过程只是一个没有感情的生产机器,只会用来生产bean,只能通过bean定义来实现 3,ApplicationContext管理了spring的整个生命周期,因此可能加载的东西可能会比较多,在一些资源受限的情况下,BeanFactory可以优先选择 9,FactoryBean就是说会在这个初始化的阶段,可以生成其他的bean的实例。例如下面的一个OrderService的一个类,再加上这个@Component这个注解之后,应该会向这个容器中注册一个OrderService的一个实例,但是如果实现了这个FactoryBean的这个接口之后,那么可以在这个重写的方法里面,可以向容器中创建一个别的实例,比如说一个UserService的这个实例。 然而这个实例只参与了整个spring生命周期的初始化阶段,像其他的实例化,属性填充等阶段都没有参与。
10,BeanPostProcessor在bean工厂中创建bean对象时,可以通过这个BeanPostProcessor的bean的后置处理器来做一些扩展,如在bean实例化之前去扫描一些类上面是否存在一些注解,在bean初始化之后去实现AOP等。 11,BeanFactoryPostProcessor这个和BeanPostProcessor的作用类似,用于作为spring的扩展。而BeanPostProcessor是用来对bean做扩展的,而这个BeanFactoryPostProcessor的bean工厂的后置处理器是对BeanFactory做一些扩展的。 12,ExcludeFilter和IncludeFilter这两个Filter是Spring扫描过程中用来过滤的 , ExcludeFilter表示排除过滤器,IncludeFilter表示包含过滤器。 在排除过滤器中,如果过滤了某个具体的类,那么这个类就算是加了@Configuration或者Component的注解,也不会将这个实例注册成bean
在spring容器启动时,也是通过这个IncludeFilter来扫描这个@Component的这个注解的。
13,PropertyEditor类型转换器可以实现类型的转换,比如说将一个String类型转化成一个对象类型。这个为jdk里面自带的一个工具
14,ConversionService类型转换器这个和上面的PropertyEditor类型转换器一样,不过这个为spring里面自带的类型转换器,相对于这个PropertyEditor类型转换器,这个ConversionService的类型转换器的功能更加的强大
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:13:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |