首先写一个接口:
package net.test.dynamicproxy;
public interface UserManager {
public void addUser(String username,String password);
public void deleteUser(String id);
}
然后写这个接口的实现类:
package net.test.dynamicproxy;
public class UserManagerImpl implements UserManager {
@Override
public void addUser(String username, String password) {
System.out.println("增加的用户名:"+username+" 密码:"+password);
}
@Override
public void deleteUser(String id) {
System.out.println("删除用户");
}
}
然后再写一个代理类,这个类实现了InvocationHandler接口:
package net.test.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserManagerHandler implements InvocationHandler {
private Object targetObject;//表示代理实例
/**
*返回一个代理实例
*/
public Object newProxy(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);
}
/**
*这个代理类被实例化后会自动调用这个invoke(..)方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
checkRole();
Object returnValue = null;
try{
method.invoke(targetObject, args);//这个方法必须要写,否则就无法实现代理,表示调用代理类的方法
}catch(RuntimeException e){
System.out.println(e);
}
return null;
}
public void checkRole(){
System.out.println("--------------检查权限-------");
}
}
测试:
package net.test.dynamicproxy;
public class Client {
public static void main(String args[]){
UserManagerHandler handler = new UserManagerHandler();
UserManager manager = (UserManager)handler.newProxy(new UserManagerImpl());
manager.addUser("hahaha", "yyd");
manager.deleteUser("110");
}
}
运行结果:
--------------检查权限-------
增加的用户名:hahaha 密码:yyd
--------------检查权限-------
删除用户
分享到:
相关推荐
在这个实例中,我们将深入探讨Java动态代理的核心概念,以及如何利用它来实现拦截器模式。 首先,我们需要了解Java动态代理的基本原理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang....
在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强其他对象的功能。这个特性通常用于实现AOP(面向切面编程)或者为已有接口提供额外的服务,如日志、事务管理等。下面我们...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,对原有对象的行为进行扩展或增强。动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是...
Java动态代理是Java编程中一个非常重要的特性,它在实际开发中被广泛应用于面向切面编程(Aspect-Oriented Programming,简称AOP)领域。AOP是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点分离,...
在这个简单的Java动态代理实例中,我们将探讨如何利用这两个核心组件来实现代理功能。 首先,我们需要理解代理模式的基本概念。代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在Java中...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在调用实际方法之前和之后添加额外的行为。本篇将深入探讨两种主要的Java动态代理技术:JDK动态代理和CGLIB。 首先,我们来...
Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用方法时添加额外的功能或控制。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等。...
几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理在很多场景下都非常有用,比如日志记录、性能监控、事务管理等。本示例将带你深入理解...
Java反射和动态代理是Java编程中的高级特性,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和修改对象的状态。动态代理则是在运行时创建一个实现...
Java动态代理是Java编程中一个重要的特性,它允许在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理主要应用于面向切面编程(AOP)和事件监听等场景,使得代码更加模块化,易于维护。以下是...
Java动态代理是Java语言提供的一种高级特性,它允许我们在运行时创建一个代理对象来代替某个接口或类的对象,这个代理对象能够对方法调用进行拦截和处理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`...
3. **创建动态代理实例**:通过动态代理类的构造函数或`newProxyInstance()`方法,传入`InvocationHandler`实例,创建动态代理实例。 #### 四、动态代理实例演示 示例代码展示了如何使用JDK动态代理创建一个代理...
`Proxy` 类是Java提供的一个内部类,它主要用于创建一个实现了指定一组接口的动态代理类实例。使用Proxy类,我们可以通过传入InvocationHandler接口的实现来控制代理对象的行为。Proxy类提供了静态方法`...
在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强已有类的功能。本篇文章将深入探讨Java动态代理的概念、原理以及如何通过一个简单的"Hello, World!"示例来理解它。 动态...
### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...
### Java动态代理完整版知识点详解 #### 一、Java反射机制概述 Java的反射机制是实现动态代理的基础,它提供了一种方式使得程序可以在运行时动态地获取类的信息(如类名、方法名等)以及操作类的对象。通过反射...
在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强已有对象的功能。动态代理通常用于实现回调、事件监听、事务管理、性能监控等多种功能。下面我们将深入探讨三个动态代理的...
JDK 动态代理JDK 提供了 java.lang.reflect.Proxy 类和 java.lang.reflect.InvocationHandler 接口来支持动态代理。Proxy 类用于创建一个代理对象,而 InvocationHandler 接口则定义了代理对象的方法调用处理逻辑。...
这个方法会返回一个实现了所有给定接口的新代理实例,当我们通过代理实例调用接口方法时,实际会转交给`InvocationHandler`的`invoke()`方法处理。 现在,我们结合给定的文件名称来理解其可能的实现结构。假设我们...