其他分享
首页 > 其他分享> > SpringAOP是什么?

SpringAOP是什么?

作者:互联网

AOP (Aspect-Orient Programming) Aspect:方面  Aspect-Orient:面向方面的 ,直翻过来 面向切面的编程. OOP:Object-Oriented Programming面向对象编程

面向对象编程是将程序抽象为各层次的对象,面向切面编程是将程序抽象为各切面的编程

javac编译

javapC:\Users\wcx\Desktop\git\JVM

 

开发过程中多个模块之间有重复的代码怎么处理,新增了一个需求,需要再多出做修改,我们需要再抽象出一个方法,然后再在需要的地方分别调用这个方法,又或者我们不需要这个方法了,我们还是得删除掉每一处调用该方法的地方。实际上涉及到多个地方具有相同的修改的问题我们都可以通过 AOP 来解决。



 

反射

反射:1.给定的一个类,通过反射获取到这个类(class)对象所有成员结构

    2.给定一个具体的对象,能够动态地调用它的方法及对任意属性值进行获取和赋值

获取对象实例的四种方法

常见的获取类锁包含的信息

 Fileld属性

反射对字段常用的操作

Field[] fields = clazz.getFields(); // 获取类中所有的公有字段
Field[] declaredFields = clazz.getDeclaredFields(); // 获取类中定义的字段
Field nameField = clazz.getField("name"); // 获取指定名称的公有字段
Field declaredField = clazz.getDeclaredField("likeDesc"); // 获取指定名称类中定义的字段
int modifiersField = likeDescField.getModifiers(); // 获取字段的修饰
nameField.setAccessible(true); // 指定字段强制访问
nameField.set(person, "hncboy"); // 成员字段赋值(需指定对象)
descriptionField.set(null, "hncboy"); // 静态字段赋值

实战

 

 反射对方法的常用操作

Method[] methods = clazz.getMethods(); // 获取类中所有的公有方法
Method[] declaredMethods = clazz.getDeclaredMethods(); // 获取本类的所有方法
Method talkMethod = clazz.getMethod("talk", String.class); // 获取类中指定名称和参数的公有方法
Method pugMethod = clazz.getDeclaredMethod("pickUpGirls"); // 获取本类中定义的指定名称和参数的方法
int modifiers = pugMethod.getModifiers(); // 获取方法的修饰符
talkMethod.invoke(boy, "I tell you"); // 指定对象进行成员方法的调用
pugMethod.setAccessible(true); // 指定方法的强制访问
pickUpGirlsMethod.invoke(null); // 指定静态方法的调用

instance:实例

实战

 反射对构造器的方法

Constructor<?>[] constructors = clazz.getConstructors(); // 获取类中所有的公有构造器
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors(); // 获取类中所有的构造器
Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(); // 获取类中无参的构造器
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, String.class); // 获取类中有参构造器
int modifiers = constructor.getModifiers(); // 获取构造器的修饰符
declaredConstructor.newInstance(); // 构造器实例对象
declaredConstructor.setAccessible(true); // 指定构造器的强制访问
constructor.newInstance("hncboy"); // 有参构造调用
clazz.newInstance(); // 直接调用默认无参构造

 实战反射构造器

 

 



 

代理

都是就是你委托别人帮你办事,所以代理模式也有人称作委托模式的。

代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

 

静态代理:

动态代理:

Invoke:调用

 JDK 动态代理:利用反射机制生成一个实现代理接口的类,在调用具体方法前调用InvokeHandler来处理。

 

 

 重写里面的invoke方法

 

 

 

 

CGlib 动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

enhancer:增强器

Intercerptor:拦截器

 

 

 

 

 

 



 

AOP分为动态AOP,静态AOP

静态AOP:在生成.class文件之前已经被修改掉了,需要使用特定的编译器比如AspectJ

动态AOP: AOP在运行的时候生成动态的对象(在内存中以JDK代理对象,或者GCLib动态的生成AOP代理类),如SpringAOP

 

标签:调用,什么,代理,clazz,获取,AOP,SpringAOP,类中
来源: https://www.cnblogs.com/baofuya/p/15612779.html