IOC容器底层实现原理利用反射

JAVA高级核心机制 反射

掌握反射是每个JAVA程序员必不可缺少的技能 基本上所有的框架底层实现原理都有反射如:不会spring框架都不好意思说自己是搞JAVA的 spring框架;

spring框架有三大核心特性:

  • IOC(控制反转)
  • Dl(依赖注入)
  • AOP(面向切面)

举个例子模仿IOCBean创建对象的过程
1.先随便建个文档来当做配置文件里面写入以键值对形式存在的Bean

IOC容器底层实现原理利用反射_第1张图片

然后在新建立一个类里面写上实现方法
IOC容器底层实现原理利用反射_第2张图片

这个类是什么意思呢 你可以把他理解为工厂动态工厂 用来创建对象的
首先我们肯定是要给把我们刚刚模拟bean的配置文件用Properties读取一下
这个时候在用get(name)方法通过键来取值
这一步骤就相当于什么呐 相当于你用纯配置文件的形式来声明Bean的时候是一样的
IOC容器底层实现原理利用反射_第3张图片
只不过我现在讲的是粗糙版的ioc容器来管理声明bean的底层实现原理

好到了高潮了这个时候我们是不是在代码里面看到了Class的影子

IOC容器底层实现原理利用反射_第4张图片

因为这个时候我们已经通过Properties的工具类来获取到了值 也就是类的全路径 然后我们就可以通过Class的一个静态方法for.Name(“类的全路径”)来创建 这个类的Class对象 这个时候在通过这个Class对象调用 class.newInstance();的方法来获取这个类的对象然后在给返回出去
这就是一个Ioc容器粗糙低配版的底层实现原理;

这时候我们再来了解反射是什么首先每个类要启动的时候就会经历两个状态 一个是编译一个是运行 在编译的时候会生成一个class的文件
IOC容器底层实现原理利用反射_第5张图片
然后在运行的时候动态的去获取一个类的全部结构信息比如:

  • 包名
  • import
  • 构造器(构造方法)
  • 属性
  • 方法

然后形成一个Class的对象 这个Class对象中封装了很多方法
IOC容器底层实现原理利用反射_第6张图片
可以用来获取一个类里面的属性和方法还有构造方法 简单来说就是可以返回一个类里面的所有东西
而且还可以修改一个方法或者属性的值或内容 就算那个类里面封装的属性是私有的不是公共的 也可以访问只要用.setAccessible(true);的方法打开封装的权限就行了 要知道反射在java的级别可是高于封装的

DL和AOP都有反射的影子在里面 就算Aop是面向切面在不改变原来的逻辑上面注入新的逻辑 也是会通过反射去注入相当于也是直接无视了封装。

封装:?!!那我走???

Class.forname()
加载一个类的全路径 只要有路径 就可以创建他的对象 这就是Class的牛逼之处
我个人觉得这个方法最好用当然还有其他两种获取Class对象的方法

        //2,类名.Class
        Class clazz = Student.class;
        System.out.println("2:"+clazz);

        //3.对象.getClass
        Student student = new Student();
        Class c = student.getClass();
        System.out.println(c);

小结

  1. 理解反射概念?反射能干啥? (1) 反射: 在jvm(JAVA虚拟机)运行阶段,动态的获取类的信息(字节码实例,构造器,方法,字段),动态进行对象的创建,方法执行,字段操作。

  2. 反射的常用类

(1) Class :所有类的字节码实例的描述

(2) Constructor :构造器

(3) Method :方法

(4) Field :字段

你可能感兴趣的:(笔记,spring,ioc)