Java高级技术(反射,注解,动态代理)

一入JAVA情几许?大家好,我是深山夕照深秋雨。

本文章创作旨在粗浅介绍Java的三个高级技术(反射,注解,动态代理),内容纯属个人观点,如有错误,欢迎指正。(作者主要是为了自己复习,内容都是泛泛而谈,想深入学习可以去看站内大佬们的文章。

测试是我们学习Java中常用的一个检查bug的手段,而作为Java初学者,我们测试时只能编写main方法,并在main方法中再去调用其他方法进行测试。 使用起来很不灵活,无法实现自动化测试。 无法得到测试的报告,需要程序员自己去观察测试是否成功。

为了更方便的进行测试,于是便有了单元测试。单元测试就是针对最小的功能单元(方法),编写测试代码对该功能进行正确性测试。Junit是我们常用的单元测试框架。它可以测试类中方法的正确性。在我们开始接触项目之后对Junit框架的使用就非常频繁。我们可以使用它进行自动化测试,对需要测试的单元一键测试。我们程序员可以对测试的结果进行预期估计,而不符合我们预期的结果则会返回错误,以便我们程序员进行修改。而要理解这些框架以及到以后我们自己编写这些框架,我们首先就要先学习反射。

一、反射

那么什么是反射呢?反射其实就指的是允许以编程方式访问已加载类的成分(成员变量、方法、构造器等)。而对于私有的成分,我们也可以进行访问,这就是暴力反射,它可以破坏封装性。就像那些进不去的地方,迈巴赫可以带你进去一样,它可以取消访问检测,无视你的private。廉价的真心是没有人会珍惜你的,抓紧时间努力吧少年。

反射是在运行时获取类的字节码文件(class文件)对象:然后可以解析类中的全部成分。 反射的核心思想和关键就是:得到编译以后的class文件对象。说人话就是你想要追一个女孩,首先就要拿到她的微信号码,加上她的微信之后,你是不是才能进而了解她的个人信息到进一步的爱好、习惯等等。这是一切故事的前提。反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以为集合存入其他任意类型的元素的。泛型只是在编译阶段可以约束集合只能操作某种数据类型,在编译成Class文件进入运行阶段的时候,其真实类型都是ArrayList了,泛型相当于被擦除了。因此我们在运用反射时往往要用到强转。

我们要学习反射,第一步就是学习如何获取类,接着我们再学习如何获取类的构造器,获取类的成员变量,获取类的成员方法。虽然我们平时在编写代码时不会这么编写代码,可是反射并不是脱裤子放屁,在做框架时都会基于反射设计一些通用技术功能。学习完反射的基本知识之后,可以试着自己做一个通用框架加深对反射的理解。(框架我个人理解就是一系列可复用的类和接口的集合)

二、注解

注解(Annotation)又称 标注,是 一种注释机制。 Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。它对Java中类、方法、成员变量做标记,然后进行特殊处理,至于到底做何种处理由业务需求来决定。例如我们提到的JUnit框架中,标记了注解@Test的方法就可以被当成测试方法执行,而没有标记的就不能当成测试方法执行。

元注解其实就是注解注解的注解,像@Retention,@Target,@Documented,@Inherited,@Repeatable(Java 8新增)这些,忘记了可以自己回去看一下。

Annotation是注解的顶级接口,注解其实都是Annotation类型的对象。注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在注解就解析出内容。AnnotatedElement这个接口定义了与注解解析相关的解析方法,而所有的类成分Class, Method , Field , Constructor,都实现了AnnotatedElement接口,他们都拥有解析注解的能力。

结合反射和注解,我们其实就可以模拟一个简易的Junit框架,以加深自己对反射和注解的理解。

三、动态代理

代理思想就是被代理者没有能力,或者不愿意去完成某件事情,需要找个人(代理)代替自己去完成这件事。

举个栗子:我家哥哥擅长唱,跳,rap,篮球,要办个演唱会(可现场打篮球,哥哥就是这么全面),那演唱会的收款,场地以及乱七八糟的一些安排,难道还要我家哥哥自己上手吗?哥哥光耍帅就已经很累了。那是不是就可以把这些事情交给经纪人或者中介公司代理。

动态代理其实主要是对被代理对象的行为进行代理——就是做这些乱七八糟的事情。那么这样子,当要办演唱会的时候,这些乱七八糟的事情就交给代理公司帮忙代理,演唱会开始之后,我家哥哥再上场开始ctrl就行了。

总结一下:代理的过程就是1.先走向代理2.代理中可以真正触发被代理对象的方法执行。 3.回到代理中,由代理负责返回结果给调用者。(中介公司先负责举办演唱会之前的事宜;我家哥哥上台表演;中介公司处理后续事情)

好了,今天就先聊到这里,说永远太久的话,那就明天见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值