第一个类:jobService
package com.my.proxy;
public interface JobService {
//显示所有员工
public void showAllEmplayee();
}
第二个类:jobServiceImpl
package com.my.proxy;
public class JobServiceImpl implements JobService {
private int type;
private String jobName;
public JobServiceImpl(String jobName,int type){
this.jobName = jobName;
this.type = type;
}
@Override
public void showAllEmplayee() {
System.out.println("当前登录用户为:"+jobName+",有权限查看职员列表和添删改操作!");
}
}
第三个类:JdkProxy
package com.my.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 使用jdk的动态代理
* @author mengyao
*
*/
public class JdkProxy implements InvocationHandler{
private Object obj;
//通过jdk代理方式调用
public Object getProxy(Object obj){
this.obj = obj;
//获取代理对象,注意这里的三个参数分别代表:1代理类的类装载器,2代理类必须实现接口后的所有接口,3回调函数
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(obj, args);
return result;
}
}
第四个类:Junit测试类
package com.my.proxy;
import org.junit.BeforeClass;
import org.junit.Test;
public class JunitProxyTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void test(){
JdkProxy proxy = new JdkProxy();
int type = 1;//1为领导,否则为职员
if (type == 1) {
JobService jobService = (JobService) proxy.getProxy(new JobServiceImpl("技术总监",1));
jobService.showAllEmplayee();
} else {
System.out.println("您的权限不足!");
}
}
}
以上代码复制可用
分享到:
相关推荐
然而,对于有接口的情况,JDK代理的创建速度更快。 - **复杂性**:JDK动态代理的API更简洁,易于理解和使用,而CGLIB需要更多的字节码操作知识。 总结起来,选择哪种代理方式取决于具体需求。如果目标对象实现了...
在软件工程中,代理模式是一种常见的设计模式,它通过为一个对象提供一个替代品或占位符来控制对这个对象的访问。这种模式通常用于添加额外的功能(例如日志记录、事务管理等)而无需修改原始对象的实现。本文将详细...
在Java中,我们可以使用JDK的动态代理或者Spring AOP来实现代理模式。 JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类是生成代理对象的工厂,而...
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,对原有...同时,它也是设计模式中的代理模式的一种实现,有助于解耦系统组件,使代码结构更加清晰。
基于java的jdk动态代理, 比较了静态代理与动态代理的区别,以及动态代理的底层实现,反编译class文件 jdk动态代理和cglib的区别
在Spring框架中,JDK代理模式是实现AOP(面向切面编程)的一种方式,它允许我们在不修改原有代码的基础上,动态地为对象添加额外的功能。JDK代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect....
在Java开发中,代理模式是一种常见的设计模式,用于在不修改原有对象的基础上,增强或扩展其功能。在Java的IT领域,尤其是Spring框架中,代理技术扮演着至关重要的角色。本文将围绕“JDK代理”、“CGI代理”以及它们...
Proxy 类是 JDK 中的动态代理类,是动态代理的核心类,其作用类似于代理模式中的代理。Proxy 类中包含的全是静态的方法和成员变量,这是一个纯粹的工具类,因此其源代码中含有一个私有的构造器,在某种意义上可以看...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
除了基本的代理实现,JDK动态代理还可以结合其他设计模式,如工厂模式,创建更加复杂的代理对象。此外,Spring框架中的AOP功能也是基于JDK动态代理或CGLIB实现的,它允许开发者定义切面,对满足特定条件的方法进行...
JDK中的代理模式应用有: - `java.lang.reflect.Proxy`: 动态代理的支持。 - RMI (Remote Method Invocation): 远程方法调用机制。 ### 创建型模式 创建型模式关注于对象的创建机制,这些模式尝试在创建新对象时...
Java 动态代理是Java语言中的一个重要特性,它允许我们在...这在设计模式中被称为代理模式,对于构建复杂、模块化的系统具有重要作用。了解和熟练使用这两种动态代理技术,可以极大地提升Java开发的效率和代码质量。
但是,由于涉及到字节码生成,其代码比JDK代理复杂。 在提供的资源中,你将找到三个目录,分别对应上述三种代理模式: - **jdkProxy**:这个目录包含了使用JDK动态代理的例子。你可以看到一个或多个接口,一个实现...
代理模式是指用一个简单的对象来代替一个复杂的对象。例如,java.lang.reflect.Proxy 類別提供了一个简单的对象来代替一个复杂的对象。 8. 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式是指创建一组有...
JDK 动态代理是 Java 语言中的一种代理模式实现方式,它使用 Java 反射机制来实现代理对象的创建。在 JDK 动态代理中,我们不需要在编译时创建代理类,而是使用 Java 反射机制在运行时动态创建代理对象。 JDK 动态...
代理模式是一种设计模式,它提供一个代理类来控制对原对象的访问。在静态代理中,我们通过编写额外的代理类来实现这一目标,但在动态代理中,代理类是在运行时生成的,无需预先编写代码。 Java JDK提供了`java.lang...
### Java代理技术详解:JDK代理、CGLIB与AspectJ #### 一、代理模式简介 代理模式是一种常见的设计模式,在《Design Patterns in Java》一书中对其有明确的定义:“代理模式为一个对象提供一个代理,以控制对该...
- **CGLIB代理**适用于目标类没有接口或者不希望修改原有接口的情况,其性能通常优于JDK代理,因为它是基于字节码生成的子类,而JDK代理需要反射调用接口方法。 在实际开发中,如Spring AOP框架就同时支持JDK和...