`

Java的动态代理实例

    博客分类:
  • Java
阅读更多

首先写一个接口:

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中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang....

    JAVA动态代理实例

    在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强其他对象的功能。这个特性通常用于实现AOP(面向切面编程)或者为已有接口提供额外的服务,如日志、事务管理等。下面我们...

    java 动态代理实例(JDK代理与CGLIB代理)

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,对原有对象的行为进行扩展或增强。动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是...

    java动态代理实例aop

    Java动态代理是Java编程中一个非常重要的特性,它在实际开发中被广泛应用于面向切面编程(Aspect-Oriented Programming,简称AOP)领域。AOP是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点分离,...

    一个简单的java动态代理的实例

    在这个简单的Java动态代理实例中,我们将探讨如何利用这两个核心组件来实现代理功能。 首先,我们需要理解代理模式的基本概念。代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在Java中...

    java动态代理实例(jdk动态代理和cglib)

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在调用实际方法之前和之后添加额外的行为。本篇将深入探讨两种主要的Java动态代理技术:JDK动态代理和CGLIB。 首先,我们来...

    java 动态代理 简单实例

    Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用方法时添加额外的功能或控制。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等。...

    Java反射和动态代理实例

    几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...

    java动态代理demo

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理在很多场景下都非常有用,比如日志记录、性能监控、事务管理等。本示例将带你深入理解...

    java反射和动态代理实例

    Java反射和动态代理是Java编程中的高级特性,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和修改对象的状态。动态代理则是在运行时创建一个实现...

    java动态代理 经典文章(word 2007格式的)

    Java动态代理是Java编程中一个重要的特性,它允许在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理主要应用于面向切面编程(AOP)和事件监听等场景,使得代码更加模块化,易于维护。以下是...

    java动态代理类的实例

    Java动态代理是Java语言提供的一种高级特性,它允许我们在运行时创建一个代理对象来代替某个接口或类的对象,这个代理对象能够对方法调用进行拦截和处理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`...

    Java中动态代理的介绍及实例

    3. **创建动态代理实例**:通过动态代理类的构造函数或`newProxyInstance()`方法,传入`InvocationHandler`实例,创建动态代理实例。 #### 四、动态代理实例演示 示例代码展示了如何使用JDK动态代理创建一个代理...

    java动态代理机制

    `Proxy` 类是Java提供的一个内部类,它主要用于创建一个实现了指定一组接口的动态代理类实例。使用Proxy类,我们可以通过传入InvocationHandler接口的实现来控制代理对象的行为。Proxy类提供了静态方法`...

    Java动态代理helloworld

    在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强已有类的功能。本篇文章将深入探讨Java动态代理的概念、原理以及如何通过一个简单的"Hello, World!"示例来理解它。 动态...

    Java代理模式Java动态代理

    ### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...

    3个动态代理实例

    在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强已有对象的功能。动态代理通常用于实现回调、事件监听、事务管理、性能监控等多种功能。下面我们将深入探讨三个动态代理的...

    Java 动态代理详解(学习资料)

    JDK 动态代理JDK 提供了 java.lang.reflect.Proxy 类和 java.lang.reflect.InvocationHandler 接口来支持动态代理。Proxy 类用于创建一个代理对象,而 InvocationHandler 接口则定义了代理对象的方法调用处理逻辑。...

    java动态代理(2)

    这个方法会返回一个实现了所有给定接口的新代理实例,当我们通过代理实例调用接口方法时,实际会转交给`InvocationHandler`的`invoke()`方法处理。 现在,我们结合给定的文件名称来理解其可能的实现结构。假设我们...

Global site tag (gtag.js) - Google Analytics