这篇文章主要介绍“SpringBoot如何实现使用反射模拟IOC和getBean”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何实现使用反射模拟IOC和getBean”文章能帮助大家解决问题。spring基础思想IOC其次就是java的反射,反射机制是spring的重要实现核心,今天我看spring的三级缓存解决循坏引用的问题时,发现一个bean的生命周期与java对象的产生流程具备高度相似性,接着我就去重温了一下bean的创建流程,发现一个bean实例从无到有经历的过程非常有意思,spring用极其优雅的代码实现了用反射和各种map数据结构实现了bean的流水线式生产,非常优雅,于是我就尝试用反射写一个逆向生成实例对象的小玩意。那么前置需要了解一个对象生成的过程:我将对象的创建过程总结为:检查常量池是否存在该对象的符号引用并确定是否经过类加载过程,都没有则进行类加载过程。为新生对象分配内存(两种方式:指针碰撞和空闲列表)并将除对象头外的其他内存空间赋值W为0。设置对象头。对象的初始化,这个就是执行你的构造方法的过程,给你需要的字段赋值你想要定义的值。补充一下其中的细节:为新生对象分配内存过程中,首先一个对象在类加载完成后它所需要的内存大小是完全确定的,分配内存的过程实际上就是在java堆里划分一块等大的内存给它,但是该怎么划分呢?如果java堆的内存布局是严格的顺序分配,即一边是使用过的,一边是空闲的,那么就会采取指针碰撞的方式分配内存,所谓的指针在空闲区与使用区的分界线处,收到内存需求时,指针向后移动直到移动所覆盖的长度等于java对象所需要的内存大小时停止并进行分配。但如果java堆的内存布局是碎片化的不连续的呢?我们就只能维护一个列表,这个列表记录了所有java堆空闲区的大小与位置信息,分配时只需要查找最适合新生对象的区域分配即可。注意:java堆是否规整是由垃圾收集器的能力决定的,是否带有空间压缩整理的能力。当我们采用的收集器是Serial与Parnew时是用指针碰撞的方式分配的,当采用的是CMS垃圾收集器的时候,则是需要使用麻烦的空闲区表分配。这里我们着重的去关注属性与方法的填充即可:一个对象的灵魂就是它的属性与方法:整个工具用到的核心属性:我们先看看这几个方法的作用:获取类型的构造器,注意这可是无参构造,如果你没有无参构造那么很有可能报错,因为我们也不知道它有多少属性对吧?(时刻记住咱们是逆向!!!不知道这个类型里有什么!!!一切都是反射带来的信息)获取属性并填充属性值,这里也顺带着将属性给进去了。获取一切方法组成方法数组。将方法存到方法集合中去存储。使用方法要通过名称。getBean方法。测试方法。类型信息如下:测试结果如下:这里我们可没有用Person person = new Person();的方式实例化对象,用反射实现了对象的实例化。里面用到关于反射的方法我列下来:getDeclaredFields 获取域属性对象getName 获取属性名称getType 获取属性类型的字节码文件setAccessible(true) 设置暴力破解,获取对私有属性的使用getDeclaredMethods 获取全部方法数组getClass 获取字节免费云主机域名码文件getConstructor 获取无参构造器关于“SpringBoot如何实现使用反射模拟IOC和getBean”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
这篇“vue时间转换的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue时间转换的方式有哪些”文章吧。做一个项目肯定会关系到很多的数…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。