jdk代理(只能代理实现了接口的类)

被代理对象实现了某些接口,在运行时产生class(代理)类,使用动态代理实现InvocationHandler接口

1.创建一个实现InvocationHandler的类,它必须实现invoke(proxy:被代理对象,method:被代理方法,args:方法的参数)方法,定义一个Object对象,写一个有参构造器传入。调用method.invoke(target)方法

2.创建被代理的类以及接口,含有业务逻辑方法

3.调用Proxy的静态方法,创建一个代理类
Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h)
* loader 类加载器
* interfaces 类实现接口
* h InvocationHandler

4.调用代理类的方法

时间: 2024-10-18 02:29:34

jdk代理(只能代理实现了接口的类)的相关文章

Spring的AOP实现使用的JDK的动态代理必须使用接口

今天,在项目中遇到一个问题,情况是这样的:在一个项目中,我配置了一个用以处理任务的工厂类,然后将这个工厂类注入到其他的service类中进行使用.在Spring中的配置如下: <bean id="linkingDetectService" class="cn.vobile.service.linkingdetect.LinkingDetectServiceImpl"> <property name="taskPriority"

JDK / CGLIB 动态代理

1.JDK 的动态代理:针对实现了接口的类产生代理 (Proxy+InvocationHandler)2.Cglib 的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术生成当前类的子类对象 (MethodInterceptor) -- Cglib是一种代码生成包 如上图:最底层是字节码,是JVM跨平台产生的虚拟指令格式(区别机器码) 字节码之上是ASM,是直接操作字节码的框架    ASM之上是Cglib等,它们可以通过ASM框架生成字节码 原文地址:https://w

【SSH系列】静态代理&amp;&amp;动态代理

从设计模式说起 代理模式是二十三中设计模式中的一种,代理模式就是指由一个代理主题来操作真实的主题,真实的主题执行具体的业务操作,而代理主题负责其她相关业务,简而言之,代理模式可以由以下三个部分组成: a.抽象角色:通过接口或抽象类声明真实角色实现的业务方法. b.代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作. c.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用.第一次接触代理模式的是在学习大话设计模式的时候,首先

JDK的动态代理为什么必须要使用接口与使用CGLIB动态代理

一.JDK的动态代理为什么必须要使用接口 JDK的代理Proxy必须要使用接口,才可以实现对方法的拦截.为什么呢?先让我们看一个JDK动态代理的示例: 接口类: public interface IPerson { public void sayHi(String nm); } 接口实现类: public class Person  implements IPerson{ public Person(){//构造 } private String name; public Person(Stri

CGLib与JDK的动态代理

一.CGLib 简介 CGLib (Code Generation Library) 是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口.Hibernate用它来实现PO字节码的动态生成.CGLib比 Java 的 java.lang.reflect.Proxy 类更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法. CGLib 的底层是Java字节码操作框架 -- ASM.CGLib就是封装了ASM,简化了ASM的操作,实现了在运行期动态生

获取JDK动态代理/CGLIB代理对象代理的目标对象。

问题描述:: 我现在遇到个棘手的问题,要通过spring托管的service类保存对象,这个类是通过反射拿到的,经过实验发现这个类只能反射取得sservice实现了接口的方法,而extends类的方法一律不出现,debug后发现这个servie实例被spring替换成jdkdynmicproxy类,而不是原始对象了,,它里面只有service继承的接口方法,而没有extends 过的super class方法,怎么调用原生对象的方法!!!!! 用托管的spring service类调用getCl

JDK,cglib动态代理-AOP学习

8.利用动态代理模式重构hibernate 动态代理模式: 1.产生的代理对象和目标对象实现了共同的接口 jdk动态代理 2.代理对象是目标对象的子类 hibernate: Person person = session.load(Person.class,1L);  javassisit spring:cglib动态代理 jdk的动态代理: 1.因为是用jdk的API做到的 2.代理对象是动态产生的 cglib产生的代理类是目标类的子类 注意事项: 1.拦截器中invoke方法体的内容就是代理

Java--简单的Spring AOP配置以及AOP事物管理,JDK/GCLib动态代理

一.看一下简单的通过XML的AOP配置 1.首先创建一个简单的Student类 public class Student { private Integer age; private String name; public void setAge(Integer age) { this.age = age; } public Integer getAge() { System.out.println("Age : " + age); return age; } public void

JDK动态代理[1]----代理模式实现方式的概要介绍

日常工作中经常会接触到代理模式,但一直没有对其进行深究.代理模式一直就像一团迷雾一样存在我心里,什么是代理模式?为什么要使用代理?代理模式有哪些实现?它的底层机制是怎样的?这些问题促使着我迫切想要揭开代理模式的神秘面纱. 1. 什么是代理模式? 日常生活中我们经常会碰到代理模式,例如我们找房产中介帮我们介绍房子,找婚姻中介帮我们介绍对象,找保洁帮我们打理房间,找律师帮我们进行诉讼等.我们在无形中运用到了代理模式,却不知道它的存在. 2. 为什么要使用代理? 运用代理可以使我们的生活更加便利,有了