·什么是Java的反射机制
—JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
·Java的反射机制的作用
—是用来编写一些通用性较高的代码或者框架的时候使用。
反射常用对象的概述
·Class
—Class类的实例表示正在运行的Java 应用程序中的类和接口
·Constructor
—关于类的单个构造方法的信息以及对它的访问权限
·Field
—Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
.Method
—Method 提供关于类或接口上单独某个方法的信息。
-Class类的常用方法和相关作用
.Class类
·Java中java.lang.Class类用于表示一个类的字节码(.class)文件
——如何得到某个class文件对应的Class对象
1)已知类和对象的情况下 类名.class
2)Object类提供 未知类和对象的情况下 对象.getClass
3)Class.forName(“包名.类名”)
Class类代表某个类的字节码,并提供了加载字节码的方法:
forName(“包名.类名”),forName方法用于加载类字节码到内存中,并封装成一个Class对象。
-Constructor类的基本作用和常用方法
.Constructor类
——Constructor类的实例对象代表类的一个构造方法得到某个类所有的构造方法
Constructor [] constructors= Class.forName("java.lang.String").getConstructors(); 得到指定的构造方法并调用
Constructor constructor = Class.forName("java.lang.String").getConstructor(String.class); String str = (String)constructor.newlnstance(“abc”);
Class类的newInstance()方法用来调用类的默认构造方法String obj =(String)Class.forName("java.lang.String").newlnstance();
-Field类的基本作用和常用方法
.Field类
——Field类代表某个类中的一个成员变量,并提供动态的访问权限Field对象的获得所有的成员变量
· Field[] fields = c.getFields();//取得所有public属性(包括父类继承)
· Field[] fields = c.getDeclaredFields(); //取得所有声明的属性 得到指定的成员变量
. Field name = c.getField("name");
· Field name=c.getDeclaredField("name");
-Method类的基本作用和常用方法
.Method类
——Method类代表某个类中的一个成员方法Method对象的获得
- 获得所有方法
getDeclaredMethods()
A getMethods()
-获得指定的方法
getDeclaredMethod(String name, Class<?>... parameterTypes) getMethod(String name, Class<?>... parameterTypes)
通过反射执行方法
invoke(Object obj, Object...args)
Spring包含 IOC/DI AOP
IOC:控制反转,以前对象需要自己new进行创建,现在把对象创建的操作交给了spring框架,用的时候直接找框架要即可;spring负责所有的对象的创建和管理,称之为IOC容器;
DI:依赖注入,一个A类需要执行B类中方法,那就是A类依赖B类,如果A类要正常运行,需要注入B类的对象;这就是依赖注入;spring框架进行自动注入对象,默认使用的是setter方法;
AOP
AOP:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP的底层实现是基于动态代理(实现方式是当切入接口时,使用JDK原生动态代理;当切入普通方法时,使用cglib动态代理)。
AOP的相关语术
Joinpoint(连接点):
所谓连接点是指那些被拦截的点。在SPring中,这些点指的是方法,因为SPring只支持方法类型的连接点。
Pointcut(切入点):
所谓通知是指拦截到Joinpoint 之后所要做的事情就是通知。通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
Introduction(引介):
引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态