【spring】通俗易懂的了解BeanDefinition

什么是BeanDefinition

  • 简单说就是对Bean信息的定义。
  • 描述一个bean的全部信息,比如他的class类型、Bean的作用域、是否懒加载…
  • spring中每一个被扫描到的bean都会生成一个BeanDefinition。
  • BeanDefinition的主要作用是为了在只解析一次类的情况下,最大程度的拿到这类的信息。防止重复解析导致效率变低。
  • spring采用ASM(字节码解析的工具)技术去得到BeanDefinition。

BeanDefinition中的常用属性

  • beanClass:表示Bean类型,未加载类的时候存放Bean的名字,加载类后存放Bean的class信息。
  • scope:表示Bean的作用域,一般值为单例或者原型。
  • lazyInit:表示Bean是否是懒加载。
  • initMethodName:Bean初始化需要执行的方法。
  • destroyMethodName:Bean销毁时要执行的方法。
  • factoryBeanName:创建当前Bean的工厂。

几种Bean的定义方式

  • xml中配置:
  • @Bean
  • @Component(@Service,@Controller)
  • 编程式定义Bean
// 得到beanDefinition 
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
// 把一个类设置为Bean
beanDefinition.setBeanClass(Test.class);
// 把这个Bean注册到容器中
context.registerBeanDefinition("test", beanDefinition);

BeanDefinition是如何存放的?

  • private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
  • 当Bean注册完成后,会在spring容器中把扫描到的beanDefinition存放到beanDefinitionMap中,方便后续的使用。

BeanDefinition的常见读取器

  • AnnotatedBeanDefinitionReader:解析类上的注解,包含某些注解的时候会成为Bean。
  • XmlBeanDefinitionReader:可以解析xml文件中的标签。
  • ClassPathBeanDefinitionScanner:扫描包路径的读取器。

结束语

  • 获取更多本文的前置知识文章,以及新的有价值的文章,让我们一起成为架构师!
  • 关注公众号,可以让你对MySQL、并发编程、spring源码有深入的了解!
  • 关注公众号,后续持续高效的学习JVM!
  • 这个公众号,无广告!!!每日更新!!!
    作者公众号.jpg
Spring 6中的BeanDefinition是指在Spring容器中定义和配置的一个实例化对象的元数据。它描述了要创建的对象的属性、构造函数参数和其他配置信息BeanDefinition包含了以下重要的属性: 1. Bean的Class:指定要创建的对象的类。 2. Bean的作用域(Scope):指定对象的生命周期管理方式,包括Singleton、Prototype、Request、Session等。 3. Bean的依赖关系:指定对象之间的依赖关系,即其他Bean定义的引用。 4. Bean的初始化和销毁方法:指定对象初始化时执行的方法和销毁时执行的方法。 5. Bean的属性值和引用:指定对象的属性值,可以是基本类型值或其他Bean的引用。 6. Bean的构造函数参数:指定实例化对象时传递给构造函数的参数。 通过配置BeanDefinitionSpring容器能够根据这些元数据来创建和管理Bean实例。在容器启动时,会解析并根据BeanDefinition来实例化对象,并进行必要的依赖注入、初始化和销毁操作。每个BeanDefinition都代表了一个独立的对象定义,通过指定不同的属性值和配置,可以创建不同的对象实例。 BeanDefinition的配置可以使用XML、注解或Java Config等方式进行。使用Spring的IoC容器可以很方便地管理和配置大量的BeanDefinition,使得开发人员能够更加灵活和高效地控制对象的创建和管理。 总之,BeanDefinitionSpring框架用于描述和配置对象实例化的元数据,通过配置BeanDefinition,可以对对象的属性、依赖关系、作用域等进行管理和配置,从而实现灵活的对象创建和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值