package proxy.cxz.org;
import java.util.Date;
public interface HelloService {
public String echo(String msg);
public Date getTime();
}
package proxy.cxz.org;
import java.util.Date;
public class HelloServiceImpl implements HelloService {
public String echo(String msg) {
return "echo: " + msg;
}
public Date getTime() {
return new Date();
}
}
package proxy.cxz.org;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class HelloServiceProxyFactory {
public static HelloService getHelloServiceProxy(
final HelloService helloService) {
InvocationHandler handler = new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before calling " + method);// Add some pre operations
Object result = method.invoke(helloService, args);
System.out.println("after calling " + method);// Add some postpone operations
return result;
}
};
Class classType = HelloService.class;
return (HelloService) Proxy.newProxyInstance(
classType.getClassLoader(), new Class[] { classType }, handler);
}
}
package proxy.cxz.org;
public class Main {
public static void main(String[] args) {
HelloService helloService = new HelloServiceImpl();
HelloService helloServiceProxy = HelloServiceProxyFactory
.getHelloServiceProxy(helloService);
System.out.println("The name of the proxy class: " + helloServiceProxy.getClass().getName());
System.out.println(helloServiceProxy.echo("hello"));
System.out.println(helloServiceProxy.getTime());
}
}
分享到:
相关推荐
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 Dynamic Proxy)或者Java接口代理来实现。 在给定的"proxy Java版"项目中,开发者对原有的代码进行了优化,使其兼容JDK 1.7。这是一个关键改进,因为JDK 1.7在Java社区中...
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
**Java动态代理(Dynamic Proxy)** Java动态代理是Java提供的一种机制,可以在运行时创建具有特定接口的代理类。这通常用于实现AOP(面向切面编程)或事件处理等。主要由java.lang.reflect.Proxy和java.lang....
JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...
Java反射(Reflection)和动态代理(Dynamic Proxy)是Java编程中的高级特性,它们为程序提供了强大的功能和灵活性。本文将深入探讨这两个主题,并通过源码分析来加深理解。 首先,让我们了解一下Java反射。反射机制...
动态代理(DynamicProxy)是Java中一种强大的设计模式,它允许在运行时创建代理对象,这些代理对象可以作为原对象的“代理”,在调用原对象的方法时添加额外的功能,如日志、性能监控、事务处理等。在Java中,`java....
在"DynamicProxy"目录下的源码中,可以看到如何使用这些类和接口创建并操作动态代理的例子。 3. 接口代理(JDK动态代理): 接口代理是基于Java的反射机制实现的动态代理,适用于目标对象实现了接口的情况。在...
**JDK代理(Java Dynamic Proxy)** JDK动态代理是Java标准库提供的一种代理机制,位于`java.lang.reflect`包下的`Proxy`类和`InvocationHandler`接口。JDK代理主要基于接口来实现,也就是说,只有实现了特定接口的...
动态代理主要由两个核心类组成:`java.lang.reflect.Proxy` 和 `java.lang.reflect.InvocationHandler`。`Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口则定义了代理对象如何处理方法调用的...
DynamicProxy dynamicProxy = new DynamicProxy(abstractSubject); AbstractSubject abstractProxy = (AbstractSubject) Proxy.newProxyInstance( abstractSubject.getClass().getClassLoader(), ...
在Java中,动态代理主要依赖于两个接口:`java.lang.reflect.InvocationHandler` 和 `java.lang.reflect.Proxy`。 `InvocationHandler` 接口定义了一个方法 `invoke()`,该方法会在代理对象的方法被调用时执行。...
Java提供了java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。Proxy类用于创建代理对象,而InvocationHandler接口定义了处理代理对象方法调用的逻辑。这种方式下,我们无需为每个...
在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...
- **JDK动态代理(Java Dynamic Proxy)**:适用于接口代理,当被代理的目标对象实现了至少一个接口时,Spring会生成该接口的实现类作为代理。 - **CGLIB代理**:如果目标对象没有实现任何接口,Spring会使用CGLIB...
在Spring中,它主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。`Proxy`类用于创建代理对象,而`InvocationHandler`接口定义了当代理对象的方法被调用时应如何处理的逻辑。...
在Java编程中,动态代理(Dynamic Proxy)是一种强大的设计模式,它允许我们在运行时创建具有特定接口的新对象。Java的动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口...
Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...
Java提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现动态代理。 1. **定义接口**:同样,我们首先定义一个接口。 ```java public interface Service { void execute(); } ``...
在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `java.lang.reflect.InvocationHandler`。`Proxy` 类用于创建动态代理实例,而 `InvocationHandler` 接口则定义了当调用代理对象的方法时应...