`
hougechuanqi
  • 浏览: 73458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java static proxy and dynamic proxy

 
阅读更多
----------------------------------------------------static proxy-----------------------------------------------------------------------------

Interface:

public interface HelloService {



public String echo(String msg);



public Date getTime();

}

Impl:
public class HelloServiceImpl implements HelloService {

public String echo(String msg) {
// TODO Auto-generated method stub
return "echo:" + msg;
}

public Date getTime() {
// TODO Auto-generated method stub
return new Date();
}

}

proxy:
public class HelloServoceProxy implements HelloService {

/**
* 表示被代理的HelloService实例
*/
private HelloService helloService;

public HelloServoceProxy(HelloService helloService) {
this.helloService = helloService;
}
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}



public String echo(String msg) {
System.out.println("预处理");
String result = helloService.echo(msg);
System.out.println("事后处理");
return result;
}

public Date getTime() {
System.out.println(" 预处理");
Date date = helloService.getTime();
System.out.println("事后处理");
return date;
}

}
client:
public class Client {

public static void main(String args[]){
HelloService helloService=new HelloServiceImpl();
HelloService helloServiceProxy=new HelloServoceProxy(helloService);
System.out.println("代理后的处理结果:"+helloServiceProxy.echo("猴哥"));
}
}
---------------------------------------------------end------------------------------------------------------------
Dynamic proxy:
----------------------------------------------Begin--------------------------------------------------
ProxyClass:
public class HelloServiceProxyFactory {

public static HelloService getHelloServiceProxy(
final HelloService helloService) {
/**
* 创建一个实现了InvocationHandler接口的的内部匿名类
*/
InvocationHandler handler = new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("预处理...");
Object result = method.invoke(helloService, args);
System.out.println("事后处理");
return result;
}
};
Class classtype = HelloService.class;
return (HelloService) Proxy.newProxyInstance(
classtype.getClassLoader(), new Class[] { classtype }, handler);
}
}
Client:
public class Client {

public static void main(String args[]) {

HelloService helloService = new HelloServiceImpl();
HelloService helloServiceProxy = HelloServiceProxyFactory
.getHelloServiceProxy(helloService);
System.out
.println("动态代理类名称为:" + helloServiceProxy.getClass().getName());
System.out.println("输出结果:" + helloServiceProxy.echo("猴哥哥"));
}
}
---------------------------------------------End------------------------------------------------------------
分享到:
评论

相关推荐

    08spring4_dynamicproxy.rar

    package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...

    java 静态代理和动态代理学习实例源码

    Java提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现动态代理。 1. **定义接口**:同样,我们首先定义一个接口。 ```java public interface Service { void execute(); } ``...

    Java动态代理语法Proxy类原理详解

    DynamicProxy dynamicProxy = new DynamicProxy(abstractSubject); AbstractSubject abstractProxy = (AbstractSubject) Proxy.newProxyInstance( abstractSubject.getClass().getClassLoader(), ...

    Java静态代理与动态代理demo

    在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...

    DynamicProxy:一个简单实用的JDK动态代理演示

    动态代理主要由两个核心类组成:`java.lang.reflect.Proxy` 和 `java.lang.reflect.InvocationHandler`。`Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口则定义了代理对象如何处理方法调用的...

    JDK动态代理proxy

    JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...

    JavaEE proxy简单代理示例

    Service dynamicProxy = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new DynamicProxyHandler(realService) ); dynamicProxy.execute(); } } ``` ...

    Java中的代理模式Demo

    Target proxyTarget = (Target) DynamicProxy.getProxyInstance(realTarget); proxyTarget.doSomething(); ``` 代理模式在实际开发中的应用广泛,如AOP(面向切面编程)框架Spring的AOP代理,以及在数据库操作中...

    java 代理(动态、静态)实例

    在这个例子中,`DynamicProxy`实现了`InvocationHandler`接口,并在`invoke`方法中处理目标方法的调用。`Proxy.newProxyInstance`方法用于创建动态代理对象。 总结,Java代理机制提供了一种灵活的方式来添加或扩展...

    JAVA设计模式之代理模式实例

    System.out.println("DynamicProxy: Before action..."); } private void after() { System.out.println("DynamicProxy: After action..."); } } // 客户端代码 public class Client { public static void ...

    java静态代理、动态代理、装饰设计模式

    public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method...

    java代理实例可供参考

    在这个“java代理实例”中,我们将会深入探讨Java动态代理(Dynamic Proxy)以及静态代理(Static Proxy)的概念,这两种方法都是实现代理模式的关键。 一、Java动态代理 动态代理是Java内置的机制,主要依赖于`...

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

    public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method...

    浅谈java代理机制 .txt

    DynamicProxy dynamicProxy = new DynamicProxy(service); Service proxyService = (Service) dynamicProxy.getProxyInstance(); proxyService.doSomething(); } } ``` #### 三、Spring框架中的代理机制 ...

    java 代理demo

    动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。`InvocationHandler`接口定义了一个`invoke`方法,当我们通过代理对象调用任何方法时,都会被转发到`invoke`方法。以下...

    Java两种代理模式案例

    你可以通过创建`Service`接口,实现`Target`和`Proxy`类(静态代理)以及`DynamicProxy`类(动态代理),然后通过调用`getInstance()`方法创建动态代理对象。运行这些示例,观察代理模式如何在实际场景中工作。 ...

    Java静态代理和动态代理

    使用`java.lang.reflect.Proxy`类的`newProxyInstance()`方法创建代理类实例。这个方法需要传递类加载器、接口数组以及我们的`InvocationHandler`实例。 ```java Class[] interfaces = target.getClass()....

    静态代理和动态代理简单实现代码

    在动态代理中,我们创建了一个实现了 `InvocationHandler` 接口的 `DynamicProxy` 类。`invoke()` 方法是关键,它会在调用真实对象的方法之前和之后添加额外的逻辑。使用 `Proxy.newProxyInstance()` 可以生成一个...

    java dtdl 动态代理

    DTDL(Dynamic Type Definition Language)在这里可能是指动态类型定义,但通常与Java动态代理相关的术语是JDK的动态代理或者CGlib等第三方库。本文将深入探讨Java动态代理的基本概念、工作原理以及如何使用。 ### ...

Global site tag (gtag.js) - Google Analytics