Spring 概念模型

Bean – 框架留给使用者实现应用业务的概念

可以是任何POJO类型,通常指运行时的某个对象。从使用者角度讲,被Spring容器管理的对象通常都是Bean,而且一个Bean一般都来自某个Bean定义。

Bean一般应用于开发人员最关注的业务逻辑,Spring框架对Bean没有相应的接口建模,换句话讲,没有要求开发人员实现某个接口才能使一个POJO成为Bean,这正是Spring的从一开始就存在的优点:尽量无侵入式地简化和支持Java开发,而非强求或者添麻烦。

BeanDefinitionBean定义

开发人员或者框架自身对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

BeanFactoryBean工厂Bean容器

可以简单地将BeanFactory理解成Bean工厂,用于(根据Bean定义)生产Bean实例,也可以理解为Bean容器,因为工厂所生产的Bean(缺省情况下指单例Bean)都会被该工厂保持一个引用清单。Spring提供了多个BeanFactory实现类,比如DefaultListableBeanFactory

BeanDefinitionRegistryBean定义注册表

通常一个BeanFactory实现类也可以实现BeanDefinitionRegistry接口。简单点讲,Bean容器即是Bean定义容器又是Bean实例容器,比如DefaultListableBeanFactory

ApplicationContext应用上下文

BeanFactory的增强。通常可以理解为这是 : 一个BeanFactory(用于管理Bean定义和Bean实例) + 文本信息解析功能 + 国际化/本地化支持 + 资源加载 + 环境信息管理 + 向注册为监听器的Bean发送事件等扩展功能。

一些Spring框架自己提供的实现类有如下等等:

  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext
  • AnnotationConfigServletWebServerApplicationContext
  • AnnotationConfigReactiveWebServerApplicationContext

AnnotationMetadata – 注解元数据

Spring对于某个类上的注解的抽象建模接口。也包含了类的每个方法的元数据和注解信息MethodMetadata。可以这么简单的理解 :
AnnotationMetadata = 类本身元数据 + 类上的注解信息 + Set(每个方法的元数据 + 注解信息)

这里面 :

  1. 类本身元数据的Spring抽象建模接口是ClassMetadata
  2. 方法的元数据 + 注解信息对应的Spring抽象建模接口是MethodMetadata

ClassMetadata – 类元数据

Spring对类本身元数据的抽象建模接口。类名称,是否是一个接口,是否是一个注解,是否为抽象类,是否实现类(concrete),是否final,是否被另外一个类包含(嵌套类的情况),super类信息,所实现的接口的信息,内嵌类的信息。

MethodMetadata – 方法元数据

Spring对某个方法元数据的抽象建模接口。包含方法名称,方法所属声明类,返回类型,是否抽象方法,是否final,是否静态函数,是否可以重载等方法基本信息。以及方法上的注解的信息。

InjectionMetadata/InjectedElement – 注入元数据/注入元素

Spring内部对注入元数据的抽象建模,不用于应用开发。InjectionMetadata表示针对某个bean类的注入元数据,是若干个注入元素InjectedElement的集合,每个注入元素InjectedElement对应一个实例成员属性,方法或者构造函数。InjectionMetadata/InjectedElementAutowiredAnnotationBeanPostProcessor/CommonAnnotationBeanPostProcessor/PersistenceAnnotationBeanPostProcessor用于搜集bean定义上的注入元数据和完成注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值