0%

Spring-Bean

Spring-Bean

什么是BeanDefinition

BeanDefinition是Spring Framework中定义Bean的配置元信息接口,包含:

  • Bean的类名
  • Bean行为配置元素,如作用域、自动绑定的模式、生命周期回调等
  • 其他Bean引用
  • 配置设置

可以通过BeanDefinitionBuilder构建或者通过BeanDefinition的实现类定义。

BeanDefinition元信息

  • Class:Bean全类名,必须是具体类,不能用抽象类或接口
  • Name:Bean的名称或ID
  • Scope:Bean的作用域
  • Constructor arguments:Bean构造器参数(用于依赖注入)
  • Properties:Bean属性设置(用于依赖注入)
  • Autowiring mode:Bean自动绑定模式(byName/byType)
  • Lazy initialization mdode:Bean延迟初始化模式(延迟/非延迟)
  • Initialization method:Bean初始化回调方法名称
  • Destruction method:Bean销毁回调方法名称

为什么需要别名

场景化使用时会更加方便,名称含义也更清晰

如何将BeanDefinition注册到IOC容器

  • xml配置
  • spring-api操作:BeanDefitionRegistry#registryBeanDefinition
  • 注解配置
    • 通过@Bean方式定义:需要搭配@Configuration使用。加载第三方组件库中的类是没有办法加@Component直接,所以使用@Bean
    • 通过@Component方式定义
    • 通过@Import方式导入

bean实例化的方式

  • 通过构造器 (XML、Java注解、Java API)
  • 通过静态工厂 (XML、Java API)
  • 通过Bean工厂方法 (XML、Java API)
  • 通过FactoryBean (XML、Java注解、Java API)
  • 通过ServiceLoaderFactoryBean (XML、Java注解、Java API)
  • 通过AutowireCapableBeanFactory#createBean (只能创建实例,不能创建接口)
  • 通过BeanDefinitionREgistry#registerBeanDefinition

bean初始化的方式

  • @PostConstruct
  • InitalizingBean
  • 自定义初始化方法

执行顺序 @PostConstruct > InitalizingBean > 自定义初始化方法

bean延迟初始化

  • @LazyInit
  • xml配置

延迟初始化不影响bean的依赖查找和依赖注入

销毁bean的基本操作

  • @PreDestory
  • DisposableBean
  • 自定义销毁方法

执行顺序:@PreDestory > DisposableBean > 自定义销毁方法

在applicationContext.close()销毁bean时触发

bean垃圾回收

在spring上下文关闭之后,spring的bean会被jvm回收