`
lcy0202
  • 浏览: 178253 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 动态代理机制

 
阅读更多

在软件系统中,会有多份代码区用到同一段代码,在维护上面造成巨大地麻烦,如果有10000个地方需要对相同的代码段进行修改,工作量将会大大增加。于是有人提出了,将相同的代码段用一个方法包起来,到用到的时候再调用,但是这样就造成了,多份代码区与该方法的一个耦合~~~最好的解决就是,不在这些代码区以硬编码方式进行对相同代码的调用,交给代理去做~~


看实例:
由于JDK动态代理只能创建指定接口的动态代理,所以,先创建一个接口。

public interface Dog
{
	//info方法声明
	public void info();
	//run方法声明
	public void run();
}

 简单的实现类

public class GunDog implements Dog
{
	//info方法实现,仅仅打印一个字符串
	public void info()
	{
		System.out.println("我是一只猎狗");
	}
	//run方法实现,仅仅打印一个字符串
	public void run()
	{
		System.out.println("我奔跑迅速");
	}
}

 接下来就是相同的代码段,也就是不用在用硬编码方式调用的代码

public class DogUtil
{
	//第一个拦截器方法
	public void method1()
	{
		System.out.println("=====模拟第一个通用方法=====");
	}
	//第二个拦截器方法
	public void method2()
	{
		System.out.println("=====模拟通用方法二=====");
	}
}

 接下来就是代理类

public class MyInvokationHandler implements InvocationHandler
{
	//需要被代理的对象
	private Object target;
	public void setTarget(Object target)
	{
		this.target = target;
	}
	//执行动态代理对象的所有方法时,都会被替换成执行如下的invoke方法
	public Object invoke(Object proxy, Method method, Object[] args)
		throws Exception
	{
		DogUtil du = new DogUtil();
		//执行DogUtil对象中的method1。
		du.method1();
		//以target作为主调来执行method方法
		Object result = method.invoke(target , args);
		//执行DogUtil对象中的method2。
		du.method2();
		return result;
	}
}

 代理类的好处就是每当被代理的对象调用自己的方法时都会被替换成执行代理类的invoke方法,这个时候就将相同的代码段被调用进来~~~

接下来就是生成动态代理类,其实就是一个工厂~~~

public class MyProxyFactory
{
	//为指定target生成动态代理对象
	public static Object getProxy(Object target)
		throws Exception
	{
		//创建一个MyInvokationHandler对象
		MyInvokationHandler handler = 
			new MyInvokationHandler();
		//为MyInvokationHandler设置target对象
		handler.setTarget(target);
		//创建、并返回一个动态代理
		return Proxy.newProxyInstance(target.getClass().getClassLoader()
			, target.getClass().getInterfaces(), handler);
	}
}

 测试一下~~

public class Test
{
	public static void main(String[] args) 
		throws Exception
	{
		//创建一个原始的GunDog对象,作为target
		Dog target = new GunDog();
		//以指定的target来创建动态代理
		Dog dog = (Dog)MyProxyFactory.getProxy(target);
		dog.info();
		dog.run();
	}
}

 结果如下~~



 可以看到,每次调用自己的方法时,都是按照代理类的invoke方法的顺序执行,可以看出动态代理对象很灵活地解决了耦合问题。

  • 大小: 20.5 KB
  • 大小: 13 KB
分享到:
评论

相关推荐

    java动态代理机制

    Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现特定接口,从而可以灵活地扩展或增强已有代码的功能。在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `...

    JAVA动态代理机制

    JAVA动态代理机制是Java语言中一个非常重要的特性,它允许我们在运行时创建具有特定接口的代理对象,这些代理对象可以在调用实际方法之前或之后执行额外的操作,如日志记录、性能监控、事务管理等。这个特性使得我们...

    JAVA 动态代理机制

    Java 动态代理机制是Java反射API的一部分,它允许我们在运行时创建代理类,这些代理类可以实现我们指定的一组接口。动态代理的核心是`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。 1....

    Java动态代理机制详解[整理].pdf

    Java动态代理机制是一种在运行时创建代理类和代理对象的技术,它允许我们在不修改源代码的情况下,对已有的接口或类进行扩展,增加新的功能。动态代理主要应用于事件监听、事务处理、性能监控等场景,提供了更加灵活...

    java动态代理机制分析及拓展

    Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。动态代理通常用于实现AOP(面向切面编程)、事件...

    Java动态代理机制分析

    Java 动态代理机制是Java反射机制的一部分,它允许开发者在运行时动态创建代理类和对象,以便在方法调用时插入自定义的行为。这种机制主要用于实现AOP(面向切面编程)和拦截器模式,提供了对方法调用的额外控制和...

    Java动态代理机制详解_动力节点Java学院整理

    Java动态代理机制详解_动力节点Java学院整理,动力节点口口相传的Java黄埔军校

    Java动态代理机制综合分析及

    Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。这一机制使得开发者无需手动编写代理类代码,只需...

    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    Java动态代理机制是一种在运行时创建代理类和对象的技术,它可以让我们在不修改原有代码的情况下,为已有接口或类添加额外的功能。动态代理通常用于实现AOP(面向切面编程)、事件监听、缓存处理、日志记录等功能。...

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

    在Java动态代理机制中,`InvocationHandler`接口扮演着关键角色。它定义了一个`invoke()`方法,当代理对象的方法被调用时,实际上是调用了`InvocationHandler`的`invoke()`方法。这个方法接收三个参数:代理对象、...

    Java动态代理机制分析及扩展

    本文通过分析Java动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能...Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地

    Java代理模式Java动态代理

    通过上述介绍,我们可以看到Java代理模式及其动态代理机制为开发者提供了强大的功能扩展能力。无论是通过代理模式控制对象的访问,还是利用Java动态代理实现特定时刻的行为增强,都是在不改变现有代码结构的前提下...

    java动态代理(2)

    Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现指定的接口。这一机制使得我们可以在不修改已有代码的情况下,为已有接口增加额外的功能或者增强已有功能的行为。在Java中,动态...

    java动态代理(3)

    总结来说,Java动态代理机制提供了在运行时动态创建具有指定接口的代理对象的能力,使得我们可以在不修改源代码的情况下,对目标对象进行功能增强。这在很多场景下都非常有用,比如AOP(面向切面编程)、事件监听、...

    Java中的动态代理

    #### 二、Java动态代理机制 Java动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类提供了一个静态方法`newProxyInstance()`用于创建动态代理对象,而`...

Global site tag (gtag.js) - Google Analytics