java刚开始原本是直接在方法中创建对象执行程序等,部分代码重复率高,后来就发展成方法封装调用,再后来出现的像spring框架等,引入了XML配置,使得程序更加简洁,方便等,其中XML配置也是基于java反射机制,再后来为了去除XML配置就采用了注解的方式,但其也是基于java反射机制。
反射机制
反射机制说白了就是用Class对象在程序运行时通过字符串动态地去实现创建对象,判断方法,对象类型等。其以下功能都来自己于Class对象实现。
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式和单例模式。
单例模式(Singleton):这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。
工厂模式(Factory):工厂模式利用Java反射机制和Java多态的特性可以让我们的程序更加具有灵活性。用工厂模式进行大型项目的开发,可以很好的进行项目并行开发。
注解
Annotation接口中有这么一句话 "The common interface extended by all annotation types. "。也就是所有的注解都继承于 java.lang.annotation.Annotation
接口。
@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,由编译程序自动编译继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节,我们通过反编译可以看到
其中,@Retention(RetentionPolicy.RUNTIME),括号内的值决定使用@Test注解的保留策略。
具体详看:Java自定义注解解析_51CTO博客_java 自定义注解
注解配置原理
继承Annotation
接口后,也还是属于接口,注解在Java内部其实就是一个接口,对于每个注解都会生成一个动态代理类,准确的说只有通过反射获取到注解时,Java才会生成这个动态代理类,对于每个使用的地方,会使用化该动态代理类。
具体详看:
七、动态代理实现分析_动态代理生成对象_老去的90后的博客-CSDN博客
https://www.cnblogs.com/ajianbeyourself/p/14560581.html
xml配置实现创建对象原理
spring通过ioc(控制反转)的方式读取配置文件中的信息然后通过反射实现对象的创建,其实就是通过获取xml文件字符串,使用反射机制,用Class对象创建对象。
具体详看:读取xml文件并通过反射创建一个对象_xml反射创建对象_qq_45411328的博客-CSDN博客
其中文章参考以下链接:
二、Java注解&反射和动态代理_java注解与动态代理_耀耀zz的博客-CSDN博客
用最直接的大白话来聊一聊Java中的反射机制 - 哔哩哔哩