8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:53次 时间:2023-02-01

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

// 普通方式获取,非根的Bean,可以有父类
BeanDefinitionBuilder#genericBeanDefinition 
// 根节点获取,只能获取根节点Bean即最顶层Bean
BeanDefinitionBuilder#rootBeanDefinition  



实例

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

/**
* 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;
}


先前看过源码的朋友会发现这里的细节#addPropertyValue 链式调用方便我们的使用,后续在自己摸源码设计上可以借鉴这种Builder实现 


源码地址:https://gitee.com/ibyte/thinking-in-spring




  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net