----------------------------------------------------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------------------------------------------------------------
分享到:
相关推荐
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.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现动态代理。 1. **定义接口**:同样,我们首先定义一个接口。 ```java public interface Service { void execute(); } ``...
DynamicProxy dynamicProxy = new DynamicProxy(abstractSubject); AbstractSubject abstractProxy = (AbstractSubject) Proxy.newProxyInstance( abstractSubject.getClass().getClassLoader(), ...
在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...
Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...
动态代理主要由两个核心类组成:`java.lang.reflect.Proxy` 和 `java.lang.reflect.InvocationHandler`。`Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口则定义了代理对象如何处理方法调用的...
JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...
Service dynamicProxy = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new DynamicProxyHandler(realService) ); dynamicProxy.execute(); } } ``` ...
Target proxyTarget = (Target) DynamicProxy.getProxyInstance(realTarget); proxyTarget.doSomething(); ``` 代理模式在实际开发中的应用广泛,如AOP(面向切面编程)框架Spring的AOP代理,以及在数据库操作中...
在这个例子中,`DynamicProxy`实现了`InvocationHandler`接口,并在`invoke`方法中处理目标方法的调用。`Proxy.newProxyInstance`方法用于创建动态代理对象。 总结,Java代理机制提供了一种灵活的方式来添加或扩展...
System.out.println("DynamicProxy: Before action..."); } private void after() { System.out.println("DynamicProxy: After action..."); } } // 客户端代码 public class Client { public static void ...
public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method...
在这个“java代理实例”中,我们将会深入探讨Java动态代理(Dynamic Proxy)以及静态代理(Static Proxy)的概念,这两种方法都是实现代理模式的关键。 一、Java动态代理 动态代理是Java内置的机制,主要依赖于`...
public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method...
DynamicProxy dynamicProxy = new DynamicProxy(service); Service proxyService = (Service) dynamicProxy.getProxyInstance(); proxyService.doSomething(); } } ``` #### 三、Spring框架中的代理机制 ...
动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。`InvocationHandler`接口定义了一个`invoke`方法,当我们通过代理对象调用任何方法时,都会被转发到`invoke`方法。以下...
你可以通过创建`Service`接口,实现`Target`和`Proxy`类(静态代理)以及`DynamicProxy`类(动态代理),然后通过调用`getInstance()`方法创建动态代理对象。运行这些示例,观察代理模式如何在实际场景中工作。 ...
使用`java.lang.reflect.Proxy`类的`newProxyInstance()`方法创建代理类实例。这个方法需要传递类加载器、接口数组以及我们的`InvocationHandler`实例。 ```java Class[] interfaces = target.getClass()....
在动态代理中,我们创建了一个实现了 `InvocationHandler` 接口的 `DynamicProxy` 类。`invoke()` 方法是关键,它会在调用真实对象的方法之前和之后添加额外的逻辑。使用 `Proxy.newProxyInstance()` 可以生成一个...
DTDL(Dynamic Type Definition Language)在这里可能是指动态类型定义,但通常与Java动态代理相关的术语是JDK的动态代理或者CGlib等第三方库。本文将深入探讨Java动态代理的基本概念、工作原理以及如何使用。 ### ...