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回收