什么是AOP(共三篇:第一篇)

什么是AOP(共三篇:第一篇)

什么是AOP(共三篇:第一篇)

据老师给我们讲,AOP是一项高深莫测的技术,它面向切面编程,可用于:测试性能,统一日志,事务管理,是基于反射加动态代理和注解的一项神秘技术。我们后面要讲到的spring框架就是基于AOP和IOC实现的。

反射技术

通过这篇文章,小阿翔希望大家可以了解反射技术以下的一些方面熟悉反射机制的作用与地位,Java的反射机制是构建框架技术的基础,这项技术会通过一些方式简化代码,减少代码量,减少程序复杂度,优化架构等等来提高编程的效率。
1、了解不同Java代码元素对应的类信息:Class、Method、Field

2、掌握Class类的作用与不同的获取方式:利用类加载器加载、类型说明符.class

3、掌握利用反射加载类并动态构建对象的方法,掌握反射中的构造方法

4、熟练利用反射机制获取类中定义的所有方法、特定方法名和参数类型列表的方法,并利用反射机制实现方法的动态调用

5、掌握利用反射+多态实现业务功能动态调整的方法

6、了解利用反射获取类中其他信息的方式,如类/成员的访问控制符,成员的特殊修饰符等

知识点1-反射作用的机制与地位

Java反射机制允许程序在运行时通过Reflection APIs取得任何一个已知名称的class的内部信息,包括其修饰符、父类、接口、构造方法、属性、方法等,并可于运行时改变属性值或者调用方法等;

Java反射机制是Java语言的一个重要特性,使得Java语言具备“动态性”:

在运行时获取任意一个对象所属的类的相关信息;

在运行时构造任意一个类的对象;

在运行时获取任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;

JAVA反射机制是构建框架技术的基础所在,例如后续学习的Spring框架等,都使用到反射技术;

知识点2-不同Java代码元素对应的类信息:Class、Method、Field

Java的反射机制依靠反射API实现,反射API主要包括以下几个类,后续学习:

java.lang.Class类:代表一个类;

java.lang.reflect.Field 类:类的成员变量(成员变量也称为类的属性);

java.lang.reflect.Method类:类的方法;

java.lang.reflect.Constructor 类:类的构造方法;

java.lang.reflect.Array类:动态创建数组,以及访问数组的元素的静态方法;

知识点3-Class类的作用与不同的获取方式:利用类加载器加载、类型说明符.class

java.lang.Class类是反射机制中最重要的类,是使用反射机制时的“起点”

JVM运行程序时,会将要使用到的类加载到内存中,同时就会自行为这个类创建一个Class对象,这个对象中就封装了类的所有信息,包括类中的属性、方法、构造方法、修饰符等;

Java.lang.Class类中定义了一系列的getXXX方法,可以获取Class中封装的其他信息;

Java.lang.Class类中定义了一系列的getXXX方法,可以获取Class中封装的其他信息;部分方法如下:
在这里插入图片描述java.lang.Class是使用反射的基础,那么获得Class对象就是重中之重,有三种方式可以得到Class对象:
在这里插入图片描述知识点4-利用反射加载类并动态构建对象的方法,掌握反射中的构造方法
使用反射可以动态创建对象,Class类中定义了newInstance方法:
在这里插入图片描述
//通过类名得到Class对象
Class<?> clazz= Class.forName(“com.chinasofti.chapter14.section01.Account”);

//使用Class对象的newInstance方法实例化
Account account= (Account) clazz.newInstance();

反射API中定义了构造方法类Constructor,前面介绍过,使用Class类中方法可以获得Constructor对象,Constructor类中定义了如下方法可以构建类的对象:

在这里插入图片描述//使用Class对象获得Constructor,方法参数是构造方法的参数类型
Constructor con=Account.class.getConstructor(String.class,String.class,Double.class);

//使用Constructor类的newInstance构建对象,方法参数数组中是构造方法的参数
Account account=con.newInstance(new Object[]{“7222 2221 1343 35325”,“832112”,new Double(3908)});

知识点5-利用反射机制获取类中定义的所有方法、特定方法名和参数类型列表的方法,并利用反射机制实现方法的动态调用
Method类可以动态调用方法,并且可以返回方法相关的信息,Method类中的部分方法如下:
在这里插入图片描述// 获得Method对象,方法名是save,参数类型是Double
Method m=clazz.getMethod(“save”, new Class[]{Double.class});
// 创建对象
Account account=(Account) clazz.newInstance();
// 调用save方法,参数是1000
m.invoke(account,new Object[]{new Double(1000)});
// 查看account对象的越是否是1000
动态查找调用Java类中的方法:
public static Object execute(String className, String methodName, Object args[]) {
Object results = null;
try {
//获得类的Class对象
Class<?> clazz = Class.forName(className);
Method method = null;
for (int i = 0; i < clazz.getMethods().length; i++) {
//返回该类的所有方法
method = clazz.getMethods()[i];
//查找名字匹配的方法
if(methodName.equals(method.getName())) {
//创建临时对象,调用方法
results = method.invoke(clazz.newInstance(), args);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值