首页 > 编程语言 >Srping AOP的学习(二):java代理

Srping AOP的学习(二):java代理

时间:2023-04-21 16:45:45浏览次数:30  
标签:Srping java 对象 代理 目标 AOP 方法 Method

1.代理的介绍

说的java的代理,就离不开java的代理模式。而java的代理模式就是通过引入一个代理对象来代替我们的实际对象进行操作,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。所以代理就是实现对功能的扩展。

2.代理的分类

代理按照大的分类可以分为静态代理和动态代理两种,而动态代理又可以分为jdk动态代理和cglib代理两种。

    • 静态代理
      静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的 class 文件,对目标方法的增强都是手动提前写好的,如果增强的方法较多的话,这时我们使用静态代理写的就比较多了,因此静态代理会比较容易理解,但是其灵活性不够。
    • 动态代理
      动态代理时在类运行的时候进行生成字节码文件的,拥有较高的灵活度,不用针对每个目标类都创建一个代理类。
      • jdk动态代理:只能代理实现了接口的类 (使用java反射包中的类和接口实现动态代理功能,java.lang.reflect里面有三个类 InvocationHandler , Method , Proxy)
      • cglib动态代理:这种是以生成目标类的子类来实现的,所以它的目标类不用必须实现接口 (第三方工具库,cglib通过继承目标类,创建它的子类,在子类中复写父类同名方法,实现功能的修改,所以目标类不能用final修饰)

 

 

InvocationHandler 接口,就一个方法invoke(),表示代理对象要执行的功能方法,你的代理类要完成功能就写在invoke()方法中。

代理类完成的功能:1.调用目标方法,执行目标方法的功能.  2.功能增强,在目标方法调用是,增加功能.

方法: public Object invoke(Object proxy, Method method, Object[] args)

Object proxy:JDK创建的代理对象,无需赋值

Method method:目标类中的方法,jdk提供的Method类

Object[] args:目标类中的参数,jdk提供的

InvocationHandler 表示你的代理要干什么;1.创建类实现InvocationHandler接口。  2.重写invoke()方法,代理类要完成的方法写在这里.

 

Method类,方法类,确切的说是目标类的方法。可以通过Method类执行目标类的方法,Method.invoke(目标对象,方法参数).

Proxy类,创建代理对象,之前创建对象都是new 类的构造方法。现在使用Proxy的静态方法创建对象,newProxyInstance()

 静态方法:Proxy.newProxyInstance(classLoader, interfaces, myInvocationHandler); 返回值就是代理对象

ClassLoader classLoader:类加载器,负责向内存中加载对象的,使用反射获取对象ClassLoader,a.getClass.getClassLoader().

Class<?>[] interfaces:接口,目标对象实现的接口,也是反射获取的.

InvocationHandler myInvocationHandler:自己写的代理类完成的功能.

 

 

 

 

 

 

 

转: https://www.cnblogs.com/mcj123/p/16860633.html

 

标签:Srping,java,对象,代理,目标,AOP,方法,Method
From: https://www.cnblogs.com/fps2tao/p/17340388.html

相关文章

  • Java基础语法(一):Java程序的结构
    前言Java是一种流行的面向对象编程语言,可以用于开发各种应用程序,从桌面应用程序到企业级Web应用程序和移动应用程序。编写Java程序时,良好的程序结构是至关重要的,因为它可以帮助程序员更好地组织代码并使其易于维护和扩展。本文将介绍Java程序的结构,包括程序组成部分、代码结构和组......
  • Java Selenium4 ChromeDriver获取指定的POST请求
    前言最近项目上需要去找某个网站对应的请求数据,但是这个网站有个奇怪的反爬机制,你如果直接去请求这个url(listPro)是获取不到数据的,它会返回一段加密后的js代码过来,如果在浏览器上执行也不行,需要在这个网站上执行,这段代码主要是加密设置一个cookie,我在浏览器上复制这个cookie后,可以......
  • 【汇智学堂】JAVA多线程实现的小游戏-龟兔争霸-2
    角色入场:publicvoidpaint(Graphicsg){g.clearRect(0,0,1600,900);Imageimage=newImageIcon("D:\\综合案例\\10\\src\\tu.png").getImage();//获取图片资源g.drawImage(image,PositionA-50,100,RecWidth,RecHeight......
  • 【汇智学堂】JAVA多线程实现的小游戏-弹球-2
    显示球板Ui类/**\*定义界面*显示球板*/packagecom.huizhi;importjavax.swing.*;importjava.awt.*;publicclassUiextendsJFrame{staticintPositionA=50,RecWidth=50,RecHeight=20;publicUi(){setTitle("弹球游戏");......
  • 重新学习Java线程原语
    Synchronized曾经是一个革命性的技术,在当前仍然有重要的用途。但是,现在是时候转向更新的Java线程原语,同时重新考虑我们的核心逻辑。自从Java第一个测试版以来,我就一直在使用它。从那时起,线程就是我最喜欢的特性之一。Java是第一种在编程语言本身中引入线程支持的语言。那是一个......
  • java EE开发之Servlet第十一课:反射基础三
    javaEE开发之Servlet第十一课:反射基础三1.使用反射机制形成通用sql语句1)构建insert语句publicstaticvoidsave(Objectobj){ //获取传递过来对象的Class类对象 Classc=obj.getClass(); //获取数据库连接 Connectionconn=getConn(); //准备执行SQL语句的对象(车......
  • JAVA入门第一天随记
    通过狂神第一天的课,对内容进行总结:一、关于markdown语法的学习1.对常用的语法进行总结1.标题2.字体斜体粗体粗斜体3.删除线无序列表2.快捷键Ctrl+Z:撤销Ctrl+X:剪切Ctrl+S:保存win+R:打开运行win+E:打开我的电脑3.打开CMD的方式1.Win+R输入cmd打开控......
  • JAVA获取当前时间的三种方法
    1、java.util.Dateday=newDate();SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);System.out.println(sdf.format(day));通过Date类来获取当前时间,比较常用。需要使用Java.util.Date类,速度一般。2、SimpleDateFormatsdf=newSimpleDateFormat......
  • java实现两张图片的相似度
    图片相似度java实现:https://zhuanlan.zhihu.com/p/568827637https://github.com/MingGH/calculate-pic-looklike 前端html5调用摄像头:https://www.cnblogs.com/hss-blog/p/9984878.htmlhttps://jeff_zhong.gitee.io/demo/dist/camera.html需要改正的是:<inputid="file"ty......
  • Java入门教程(1)——Java概述
    文章目录1.编程环境1.1开发环境2.2编程工具2.语言特点3.java的发展历程1.编程环境1.1开发环境JDK称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境,一些Java工具和Java的核心类库。2.2编程工具1.Ec......