Bean – 框架留给使用者实现应用业务的概念
可以是任何POJO类型,通常指运行时的某个对象。从使用者角度讲,被Spring容器管理的对象通常都是Bean,而且一个Bean一般都来自某个Bean定义。
Bean一般应用于开发人员最关注的业务逻辑,Spring框架对Bean没有相应的接口建模,换句话讲,没有要求开发人员实现某个接口才能使一个POJO成为Bean,这正是Spring的从一开始就存在的优点:尽量无侵入式地简化和支持Java开发,而非强求或者添麻烦。
BeanDefinition – Bean定义
开发人员或者框架自身对Bean的定义的抽象建模。框架基于此定义和其他配置信息,比如AOP配置,生成最终运行时使用的Bean实例。Bean定义可能来自某个开发人员或者框架的XML配置或者注解,也可能由框架通过程序方式生成。Bean定义会注册到BeanDefinitionRegistry用于Bean实例的创建。
Bean定义其实是一个Spring框架内部概念,用于抽象使用者(开发人员或者框架自身)对一个Bean的定义,通常使用者不必太关心Bean定义的实现原理,而是只需要按照Spring建议的方式定义Bean就可以了,如何发现和注册Bean定义都是框架的工作。但是如果你想深度了解和学习Spring框架的工作原理,建议理解此内部基础概念。
Bean定义在框架内有对应的接口抽象,它就是BeanDefinition,位于包org.springframework.beans.factory.config。
ConfigurationClass – 配置类
开发人员通过使用注解@Component,@Configuration定义的类,本身会作为一个Bean注册到容器,这些类的主要目的是可以通过@Bean注解的成员方法及其内置类定义更多的Bean。
BeanFactory – Bean工厂,Bean容器
可以简单地将BeanFactory理解成Bean工厂,用于(根据Bean定义)生产Bean实例,也可以理解为Bean容器,因为工厂所生产的Bean(缺省情况下指单例Bean)都会被该工厂保持一个引用清单。Spring提供了多个BeanFactory实现类,比如DefaultListableBeanFactory。
BeanDefinitionRegistry – Bean定义注册表
通常一个BeanFactory实现类也可以实现BeanDefinitionRegistry接口。简单点讲,Bean容器即是Bean定义容器又是Bean实例容器,比如DefaultListableBeanFactory。
ApplicationContext – 应用上下文
对BeanFactory的增强。通常可以理解为这是 : 一个BeanFactory(用于管理Bean定义和Bean实例) + 文本信息解析功能 + 国际化/本地化支持 + 资源加载 + 环境信息管理 + 向注册为监听器的Bean发送事件等扩展功能。
一些Spring框架自己提供的实现类有如下等等:
ClassPathXmlApplicationContextFileSystemXmlApplicationContextAnnotationConfigServletWebServerApplicationContextAnnotationConfigReactiveWebServerApplicationContext
AnnotationMetadata – 注解元数据
Spring对于某个类上的注解的抽象建模接口。也包含了类的每个方法的元数据和注解信息MethodMetadata。可以这么简单的理解 :
AnnotationMetadata = 类本身元数据 + 类上的注解信息 + Set(每个方法的元数据 + 注解信息)
这里面 :
- 类本身元数据的
Spring抽象建模接口是ClassMetadata。 - 方法的元数据 + 注解信息对应的
Spring抽象建模接口是MethodMetadata。
ClassMetadata – 类元数据
Spring对类本身元数据的抽象建模接口。类名称,是否是一个接口,是否是一个注解,是否为抽象类,是否实现类(concrete),是否final,是否被另外一个类包含(嵌套类的情况),super类信息,所实现的接口的信息,内嵌类的信息。
MethodMetadata – 方法元数据
Spring对某个方法元数据的抽象建模接口。包含方法名称,方法所属声明类,返回类型,是否抽象方法,是否final,是否静态函数,是否可以重载等方法基本信息。以及方法上的注解的信息。
InjectionMetadata/InjectedElement – 注入元数据/注入元素
Spring内部对注入元数据的抽象建模,不用于应用开发。InjectionMetadata表示针对某个bean类的注入元数据,是若干个注入元素InjectedElement的集合,每个注入元素InjectedElement对应一个实例成员属性,方法或者构造函数。InjectionMetadata/InjectedElement被AutowiredAnnotationBeanPostProcessor/CommonAnnotationBeanPostProcessor/PersistenceAnnotationBeanPostProcessor用于搜集bean定义上的注入元数据和完成注入。
1863

被折叠的 条评论
为什么被折叠?



