第四章-Spring Bean定义

定义 Spring Bean

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

  • Bean 的类名
  • Bean 行为配置元素,如作用域、自动绑定的模式,生命周期回调等
  • 其他 Bean 引用,又可称作合作者(collaborators)或者依赖(dependencies)
  • 配置设置,比如 Bean 属性(Properties)

BeanDefinition 元信息

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

命名 Spring Bean

  • 每个 Bean 拥有一个或多个标识符(identifiers),这些标识符在 Bean 所在的容器必须是唯一的。通常,一个 Bean 仅有一个标识符,如果需要额外的,可考虑使用别名(Alias)来扩充。
  • 在基于 XML 的配置元信息中,开发人员可用 id 或者 name 属性来规定 Bean 的 标识符。通常Bean 的 标识符由字母组成,允许出现特殊字符。如果要想引入 Bean 的别名的话,可在name 属性使用半角逗号(“,”)或分号(“;”) 来间隔。
  • Bean 的 id 或 name 属性并非必须制定,如果留空的话,容器会为 Bean 自动生成一个唯一的名称。Bean 的命名尽管没有限制,不过官方建议采用驼峰的方式,更符合 Java 的命名约定。

Spring Bean 的别名

Bean 别名(Alias)的价值

  • 复用现有的 BeanDefinition
  • 更具有场景化的命名方法,比如:

注册 Spring Bean

  • XML 配置元信息
    <bean name=”…” … />
  • Java 注解配置元信息
    @Bean
    @Component
    @Import
  • Java API 配置元信息
    命名方式:BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)
    非命名方式:
    BeanDefinitionReaderUtils#registerWithGeneratedName(AbstractBeanDefinition,Be
    anDefinitionRegistry)
    配置类方式:AnnotatedBeanDefinitionReader#register(Class…)

实例化 Spring Bean

  • 常规方式
    通过构造器(配置元信息:XML、Java 注解和 Java API ) • 通过静态工厂方法(配置元信息:XML 和 Java API ) • 通过 Bean 工厂方法(配置元信息:XML和 Java API )
    通过 FactoryBean(配置元信息:XML、Java 注解和 Java API )
  • 特殊方式
    通过 ServiceLoaderFactoryBean(配置元信息:XML、Java 注解和 Java API )
    通过 AutowireCapableBeanFactory#createBean(java.lang.Class, int, boolean)
    通过 BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)

初始化 Spring Bean

  • @PostConstruct 标注方法
    实现 InitializingBean 接口的 afterPropertiesSet() 方法
  • 自定义初始化方法
    XML 配置:<bean init-method=”init” … />
    Java 注解:@Bean(initMethod=”init”)
    Java API:AbstractBeanDefinition#setInitMethodName(String)

延迟初始化 Spring Bean

XML 配置:<bean lazy-init=”true” … />
Java 注解:@Lazy(true)

销毁 Spring Bean

  • @PreDestroy 标注方法
  • 实现 DisposableBean 接口的 destroy() 方法
  • 自定义销毁方法
    XML 配置:<bean destroy=”destroy” … />
    Java 注解:@Bean(destroy=”destroy”)
    Java API:AbstractBeanDefinition#setDestroyMethodName(String)

垃圾回收 Spring Bean

  • 关闭 Spring 容器(应用上下文)
  • 执行 GC
  • Spring Bean 覆盖的 finalize() 方法被回调
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值