结合Spring中Beans理解Java中的反射机制

引入

都说反射机制是Java中许多框架的设计灵魂。

菜鸡(我):此话怎讲!

反射概述

在运行状态中,对于任意一个类,都能够知道其所有属性和方法;对于任意一个对象,都能够调用其任意一方法。
动态获取信息,动态调用对象方法

进一步解释

就是把Java类中的各个部分,映射成一个个的Java对象
一个类中的 成员变量方法构造方法等,利用反射方法可以把这些组成部分映射成 一个个对象

反射功能
在这里插入图片描述
反射空间
在这里插入图片描述

对Spring注解的猜测

Spring的xml注解起着很重要的作用,而xml的解析说的简单点就是得到了一些有用的字符串

Java反射的一大特点就是利用字符串就能获得类(class)

要知道Java真正运行的文件是经过编译后的 .class 文件

反射对应的方法 .forName("");

Class c = Class.forName("com.util.MathUtil");

forName的参数是对应类的全称限定名 String类型,不能写错

构造器类
Spring——xml:
在这里插入图片描述
从这段注解里我们能看出什么:


首先bean会反射出一个类

Class MathUtil = Class.forName("com.util.MarhUtil");

如果没有“constructor-arg”标签,JVM会调用MathUtil类的无参构造,但。。。

对应无参代码:

Constructor constructor = MathUtil.getConstructor();
constructor.newInstance();

有的话就是有参构造,这个不必多言:

Constructor constructor = MathUtil.getConstructor(String.class,int.class);
constructor.newInstance("abc",20);

附上MathUtil类:
在这里插入图片描述
Spring Setter注入,方法类
Spring——xml:
在这里插入图片描述
附上Computer类:
在这里插入图片描述
这段代码的property标签是将IntelCpu(实现了Cpu接口)这个对象注入给Computer,这里采用的是Setter方法注入:
IntelCpu类:
在这里插入图片描述
对应反射代码猜测:

Class computer = Class.forName("com.Computer");
Computer = (Computer) computer.newInstance();
Method method = computer.getMethod("setCpu",Cpu.class);
method.invoke(commputer,IntelCpu);//这里的IntelCpu应该也是通过反射构建的

factory-bean和factory-method标签:
ThinkPad类:
在这里插入图片描述
显而易见,还是Method方法:

Class think= Class.forName("com.ThinkPad");
ThinkPad= (ThinkPad) think.newInstance();
Method method = think.getMethod("createComputer");
method.invoke(think);

关于上述Method和Constructor在获取的时候,对应方法的权限都是public
如果权限为private呢?还能获取吗?

菜鸡(我):这指定不能了,private很安全的。

当然可以获得!

菜鸡(我):嘿嘿,我刚才卡了(我SB呵呵了)

强制反射是存在的:

ThinkPad think= (ThinkPad) c.newInstance();
Method method = think.getDeclaredMethod("createComputer");
method.setAccessible(true);//暴力反射
method.invoke(think);

所以说,private对于越无知的人越安全,。

菜鸡(我)被踢出了直播间~

关于反射的全面用法请参考我的另一篇博客:反射详解

That’s all,,.Thank you!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值