前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?

BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?

作者头像
码农架构
修改2020-10-27 18:48:44
1K0
修改2020-10-27 18:48:44
举报
文章被收录于专栏:码农架构

Spring 上一篇文章中已介绍了Bean 的定义,什么是BeanDefinition?下面主要源码结合模式分析BeanDefinition元信息「Bean的配置元信息

下面罗列了BeanDefinition元信息配置

上面一表格形式概括说明BeanDefinition元信息配置,不是所有的属性配置都是必须的,但是前面几个参数属性是必须的

附加补充说明

  • Bean 的作用域 (比如:我们常用的singleton、prototype、request等)作用域类型如下图所示,后续会针对Scope做详细讲解
  • Bean 的自定绑定模式 (比如:byName、byType、constructor等)自动绑定模式、这种方式属性和外面引用自动关联和配置
  • Bean 的延迟初始化的模式,默认情况下是非延迟的,就是Bean在容器启动过程中会实时进行初始化,此时相对应的属性或则配置会进行一定的设置;相反延迟化的,是按需进行初始化,这种方式可以有效减少启动时间,需要的时候对Bean进行初始化
  • Bean 的初始化 & 销毁,通常都是成对出现

如何构建BeanDefinition?

  • 通过 BeanDefinitionBuilder 构建
  • 通过 AbstractBeanDefinition 以及派生类

注意细节⚠️

BeanDefinitionBuilder提供了两种方式获取BeanDefinitionBuilder

代码语言:javascript
复制
// 普通方式获取,非根的Bean,可以有父类
BeanDefinitionBuilder#genericBeanDefinition 
// 根节点获取,只能获取根节点Bean即最顶层Bean
BeanDefinitionBuilder#rootBeanDefinition  

实例

代码语言:javascript
复制
public class BeanDefinitionCreationDemo {

    public static void main(String[] args) {
        // 1.通过BeanDefinitionBuilder 构建
        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);

        // 通过属性配置
        beanDefinitionBuilder.addPropertyValue("id", 1);
        beanDefinitionBuilder.addPropertyValue("name", "小码哥");

        // 获取BeanDefinition 实例
        BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
        // BeanDefinition 并非 Bean 终态,可以自定义修改

        // 2. 通过 AbstractBeanDefinition 以及派生类
        GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
        // 设置Bean 类型
        genericBeanDefinition.setBeanClass(User.class);
        // 通过MutablePropertyValues 批量操作属性
        MutablePropertyValues propertyValues = new MutablePropertyValues();
        propertyValues
                .add("id", 1)
                .add("name","小码哥");

        // 通过 set MutablePropertyValues 批量操作属性
        genericBeanDefinition.setPropertyValues(propertyValues);
    }
}

BeanDefinitionBuilder#addPropertyValue

代码语言:javascript
复制
/**
* Add the supplied property value under the given property name.
*/
public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value) {
      this.beanDefinition.getPropertyValues().add(name, value);
      return this;
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档