范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

BeanDefinition简单梳理

  spring 容器启动的时候会先执行bean扫描操作,扫描之后的每个bean信息都封装到BeanDefinition中去,这个BeanDefinition 到底存放了什么信息?bean的class 类型,FactoryBean的名称和FactoryBean的工厂方法。  bean的作用域,是否是primary,是否是延迟加载,描述信息,是否是单例。 bean的依赖信息。 bean的初始化方法和销毁方法。 bean 属性值信息以及构造函数信息。 bean的其他信息等等。
  总之一句话:beanDefinition中包含了要实例化和初始化一个bean的所有信息,另外引入BeanDefinition的另一个总用是:再只解析一次bean的情况下,尽可能的拿到bean的所有信息,防止重复解析,以空间获取时间。
  spring是如何解析得到一个Bean的BeanDefiniton信息?这个底层是借助于asm技术(字节码解析技术)。
  BeanDefinition 存在的意义 提升效率 :Spring创建一个Bean是通过反射创建的,通过将Class、注解信息等等这些信息缓存起来,在创建bean的时候能够直接从缓存中获取从而达到提升创建效率的目的。 方便修改 :spring创建对象的时候,创建的信息全部是通过 BeanDefinition 内存储的信息来创建对象的,所以,我们可以通过修改BeanDefinition内部特定的值来改变Spring创建对象的结果。 便于扩展 :我们通过一些特定的接口,可以获取到一个类的所有的BeanDefinition信息,从而完成一些特定功能的实现。
  BeanDefinition一些实现及子接口 AnnotatedBeanDefinition: 子接口,新增了获取注解元数据信息和工厂方法元数据信息的方法。AbstractBeanDefinition:BeanDefinition 的抽象实现类,实现了BeanDefinition的大多数方法,同时定义了很多静态常量/定义了一些变量设置了默认值,一般的其他的BeanDefinition都是继承这个抽象类。ChildBeanDefinition:相当于一个子类,必须得有一个父级BeanDefinition(spring 2.5之后已经不建议使用了,可以用GenericBeanDefinition替代 )。RootBeanDefinition:可以作为其他BeanDefinition的父级BeanDefinition,也可以单独作为beanDefinition,但是不能设置其父级beanDefinition,setParentName方法会直接抛出异常。 ScannedGenericBeanDefinition:通过注解扫描出来的Bean的BeanDefinition都是这种类型。 AnnotatedGenericBeanDefinition:存在@Bean配置的配置类,扫描出来的BeanDefinition 都是这种类型。
  BeanDefinition 在BeanFactory中是如何存储的
  DefaultListableBeanFactory 类中定义了存储BeanDefinition的map
  private final  Map, BeanDefinition> beanDefinitionMap  = new  ConcurrentHashMap<>(256 );
  BeanDefinition生成的地方 ClassPathBeanDefinitionScanner:scan方法。AnnotatedBeanDefinitionReader: register 方法。编程的方式定义BeanDefinition:AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(BizService.class)                 .addDependsOn("com.zgh.xxxxService")    //设置一些依赖                 .addPropertyValue("id",1243) //设置一些属性                 .setInitMethodName("init")   //设置初始化方法                 .getBeanDefinition(); //BeanDefinitionRegistry registry,可以在BeanDefinitionRegistryPostProcessor 的postProcessBeanDefinitionRegistry //方法中进行注册 registry.registerBeanDefinition("bizService",beanDefinition);

苏州亚马逊小白福利如何抓住春节发展机遇,赶上2019年平台红利自古以来,苏杭并称。在杭州跃居国内电商之首后,苏州不甘落后,专注发展跨境电商行业。经过多年发展,不论是在规模体量,还是技术经验方面,苏州的跨境电商已足以和杭州媲美。因此,苏州也就有退伍军人补贴养老金优惠新政策大全(建议收藏)(一)农村籍退役士兵老年生活补助规定按照民政部的部署,对1954年11月1日以后入伍年龄在60周岁以上(含60周岁)未享受到国家定期抚恤补助的农村籍退役士兵,自2011年8月1日起新社保迎来三大变化!明年1月1日开始实施!这10种人可不缴社保最新文件公布,事关所有人社保将迎来三大变化!人力资源社会保障部2018年11月13日最新发布社保经办管理服务条例征求意见稿。大幅减少证明事项,解决难点痛点,制定黑名单制度,未来社保认为MacBookPro的TouchBar毫无意义?这4个应用程序让它变得很棒自从Apple向全世界推出TouchBar已经快三年了,它仍在寻找一个目标。虽然它并不比它取代的功能键差,但Apple确实在努力帮助它发挥其潜力,使其成为拥有MacBookPro的社保新政倒计时,有的HR涨薪,有的HR离职个税调整社保入税,新政环境下,HR从没有像现在这样,从内心深处产生如此强烈的学习需求!可以说,HR的工作是和学习结合在一起的,HR比职场中任何岗位都需要学习。学习的过程是痛苦的还是能耗双控下限电对自动化行业的影响国庆过后,关于限电话题的讨论热度稍有回落,但仍然不妨碍各地区限电的举措继续执行。在能耗双控的大背景下,从九月中旬起,限电停工潮席卷全国。全国十多个省份限电拉闸,最严重的甚至被要求开项目组内统一这些RTL编码规则,让项目管理更轻松随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。因为VerilogHDL的语法相对开放,所以每个人开发的V顺丰同城IPO三年累亏14亿,去年支付骑手外包成本48亿6月30日晚间,港交所披露了杭州顺丰同城实业股份有限公司(以下简称顺丰同城)港股IPO申报稿,美银证券和中金公司为联合保荐人。申报稿显示,顺丰同城营业收入从2018年的人民币9。9拨号和宽带Internet访问有什么区别?宽带Internet访问和拨号Internet访问之间有区别。我们可以从以下几个方面理解。上网的常见方法如下(1)使用MODEM拨号上网(2)使用ADSL宽带拨号Internet访华为智能手机遇难,荣耀子品牌首当其冲美国的芯片封锁愈演愈烈,地球人都知道华为现在没有芯片了,就在前不久,华为余承东更是直接向外宣布因为华为没有芯片,搭载麒麟9000的mate40可能是绝版机型,华为手机所处的困境,可你知道7年前的大疆无人机和现在的大疆无人机都有什么区别吗?你知道7年前的大疆无人机和现在的大疆无人机都有什么区别吗?视频加载中这是大疆在2014年发布的精灵2v这是大疆在2020年发布的御air2和mini2代我们这一期内容主要对比的是7