ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringAOP是什么?

2021-11-28 19:31:06  阅读:169  来源: 互联网

标签:调用 什么 代理 clazz 获取 AOP 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有