`

java动态代理使用示例

    博客分类:
  • java
阅读更多

java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。
    其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。
    Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,List接口定义的业务方法,Vector是List接口的实现,VectorProxy 是InvocationHandler接口实现。

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
import java.util.Vector;
 
public class VectorProxy implements InvocationHandler{
 
	private Object proxyObj;
 
	public VectorProxy(Object obj){
		proxyObj = obj;
	}
 
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
 
		System.out.println("Being calling method: " + method);
 
		for(Object obj: args){
			System.out.println(obj + " ");
		}
 
		Object o = method.invoke(proxyObj, args);
 
		System.out.println("After class metrhod: " + method);
 
		return o;
	}
 
	public static Object factory(Object obj){
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), 
obj.getClass().getInterfaces(), new VectorProxy(obj)); 
	}
 
	public static void main(String[] args){
		List v = null;
		v = (List)factory(new Vector(10));
		v.add("hello");
		v.add("world");
	}
 
}

 输出:

Being calling method: public abstract boolean java.util.List.add(java.lang.Object)
hello
After class metrhod: public abstract boolean java.util.List.add(java.lang.Object)
Being calling method: public abstract boolean java.util.List.add(java.lang.Object)
world
After class metrhod: public abstract boolean java.util.List.add(java.lang.Object)

 

分享到:
评论

相关推荐

    java动态代理例子

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理类,这些代理类可以作为原有类的代理,从而在不修改原有类代码的情况下,扩展或增强原有类的功能。这里我们将深入探讨两个主要的Java动态代理...

    java动态代理demo

    5. **动态代理示例** - 首先,定义一个接口,如`MyService`,包含一些业务方法。 - 创建一个实现了`MyService`接口的目标对象,如`RealService`,实现接口中的方法。 - 实现`InvocationHandler`接口,重写`invoke...

    java动态代理实例

    下面是一个简单的动态代理示例: ```java interface MyService { void doSomething(); } class RealService implements MyService { @Override public void doSomething() { System.out.println("Real service...

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

    - `设计模式:用Java动态代理实现AOP.docx`可能包含了如何使用Java动态代理来实现设计模式,尤其是代理模式,以达到AOP的效果。 - `Spring AOP入门实例详解.docx`可能涵盖了Spring AOP的基本概念、配置以及如何...

    java 动态代理 简单实例

    我们可以创建一个实现了该接口的实际服务类 `ServiceImpl`,然后使用动态代理来增强它的功能: ```java public class ServiceImpl implements Service { @Override public void doSomething() { System.out....

    java动态代理机制

    - **缓存机制**:在数据访问层,如果一个方法需要频繁访问数据库,可以使用动态代理在方法执行前先检查缓存,如果缓存中有结果则直接返回,避免了不必要的数据库访问。 - **事务管理**:动态代理可以用来管理事务...

    Java动态代理helloworld

    "示例来理解Java动态代理: ```java // 目标接口 public interface HelloWorld { void sayHello(); } // 目标实现 public class HelloWorldImpl implements HelloWorld { @Override public void sayHello() { ...

    Java代理模式Java动态代理

    4. **客户端使用动态代理** 在客户端代码中创建代理对象并调用方法: ```java Service realService = new RealService(); InvocationHandler handler = new MyInvocationHandler(realService); Service proxy ...

    Java动态代理案例演示代码

    在提供的压缩包文件中,可能包含了一个简单的示例,展示了如何创建和使用动态代理。通过阅读和理解这个例子,你可以更深入地掌握动态代理的实现细节。如果你对某个部分有疑问,或者想要了解更多相关知识,可以参考...

    java动态代理实现详解

    使用Java动态代理的步骤: 1. 实现`InvocationHandler`:创建一个类实现`InvocationHandler`接口,重写`invoke()`方法。在这里可以添加预处理、后处理逻辑,或者转发调用给目标对象。 2. 定义接口:确定代理对象需要...

    JAVA静态代理和动态代理

    3. 创建并使用动态代理: ```java Service realService = new RealService(); Service proxyService = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new ...

    Java动态代理程序切片示例

    总结起来,这个示例展示了如何利用Java的注解和动态代理技术为JavaBean添加额外的功能。通过注解,我们可以方便地标识需要进行特殊处理的方法,而动态代理则负责在运行时生成代理对象,使得在调用这些方法时能够执行...

    java动态代理和cglib动态代理示例分享共5页.pdf

    以下是一个简单的Java动态代理示例: ```java public class MyInvocationHandler implements InvocationHandler { private Object target; public MyInvocationHandler(Object target) { this.target = target;...

    示例代码:java动态代理和cglib代理的简单例子

    然后,我们创建了两个代理类,一个使用Java动态代理,另一个使用CGLIB。在测试类中,我们创建了两个代理对象并调用`doSomething()`方法,可以看到在调用前后分别打印出了代理的信息。 总结,Java动态代理和CGLIB...

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

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

    java装饰模式及动态代理模式示例源码

    在数据库连接池的例子中,动态代理可以用来创建一个代理数据库连接,这个代理在获取连接时,可以自动地进行连接池的管理和资源调度。 在实际的数据库连接池实现中,我们通常会有一个`ConnectionPool`类作为装饰器,...

    JAVA动态代理的例子

    JAVA动态代理的例子 一个简单的例子 初学者可以下载试试

    Java静态代理与动态代理demo

    // 动态代理示例 interface Service { void doSomething(); } // InvocationHandler 实现 class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { ...

    java jdk 动态代理 演示demo

    下面是一个简单的动态代理示例: ```java interface MyService { void doSomething(); } class MyServiceImpl implements MyService { @Override public void doSomething() { System.out.println("Doing ...

Global site tag (gtag.js) - Google Analytics