lhwork 发表于 2006-7-3 11:36:29
public interface IHello {
public void hello(String name);
}
--------------------------------------------------------------------------------
public class HelloSpeaker implements IHello {
public void hello(String name) {
System.out.println("Hello, " + name);
}
}
--------------------------------------------------------------------------------
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LogHandler implements InvocationHandler {
private Object delegate;
private Logger logger = Logger.getLogger(this.getClass().getName());
public Object bind(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
try {
log("method starts..." + method);
result = method.invoke(delegate, args);
logger.log(Level.INFO, "method ends..." + method);
} catch (Exception e) {
log(e.toString());
}
return result;
}
private void log(String message) {
logger.log(Level.INFO, message);
}
}
--------------------------------------------------------------------------------
public class ProxyDemo {
public static void main(String[] args) {
LogHandler logHandler = new LogHandler();
IHello helloProxy = (IHello) logHandler.bind(new HelloSpeaker());
helloProxy.hello("Justin");
}
分享到:
相关推荐
在`invoke()`方法内部,我们可以实现自己的逻辑,如在调用实际方法之前或之后添加额外的操作。一旦`invoke()`完成,它将返回方法的调用结果。 创建动态代理的基本步骤如下: 1. 定义接口:首先,你需要定义一个或...
在这个例子中,`MyTarget`是需要代理的类,它实现了`MyInterface`接口。通过这种方式,我们可以在不修改`MyTarget`源码的情况下,为它的方法添加额外的功能。 总结一下,Java的动态代理机制是一种强大的工具,它让...
动态代理在Java编程中是一种非常重要的技术,它允许我们在运行时创建代理类,这些代理类可以作为原有类的“中间人”,在调用原始方法之前或之后执行额外的操作。这通常用于实现AOP(面向切面编程)的概念,如日志、...
在这个“Java设计模式-代理模式例子”中,我们可能能看到如何创建静态代理类,以及如何利用`Proxy`和`InvocationHandler`创建动态代理。源码分析可以帮助我们更好地理解代理模式的实现细节,并能将其运用到自己的...
在这个"动态代理(AOP)简单例子"中,可能会展示如何使用JDK或CGLIB创建代理对象,以及如何使用匿名类实现InvocationHandler接口。同时,通过对比直接调用和动态调用,可以更直观地理解动态代理带来的优势。这个例子...
4. **例子中的模拟拦截器**:在提供的示例中,很可能是创建了一个实现了目标接口的代理对象,并且在`InvocationHandler`的`invoke()`方法内实现了拦截逻辑。例如,可能会在方法调用前打印开始时间,在调用后打印结束...
在Java编程领域,动态代理是一种强大的技术,它允许我们在运行时创建对象的代理,这些代理对象可以在调用实际目标对象的方法之前或之后执行额外的操作。动态代理主要应用于AOP(面向切面编程)和RPC(远程过程调用)...
在这个例子中,`StaticProxy` 类作为 `RealService` 的代理,实现了 `Service` 接口,并在调用 `doSomething()` 方法前后添加了额外的操作。 **动态代理** 动态代理则更灵活,代理类是在运行时动态创建的,这通常...
例如,我们可以创建一个拦截器,当调用HibernateTemplate的save、update或delete方法时,该拦截器会在执行数据库操作前记录日志,然后调用真实的方法,最后在操作成功后记录结束日志。这样,我们无需修改原有的...
这个代理类会拦截调用并执行额外的操作。动态代理的核心是`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。 1. `InvocationHandler`接口: `InvocationHandler`定义了一个方法`invoke()...
- 动态代理:Java的Proxy类和InvocationHandler接口可以利用反射创建动态代理对象,实现接口的动态方法调用。 - 数据库操作:ORM(对象关系映射)工具如MyBatis使用反射将数据库结果集映射到Java对象。 - 编译器...
在这个例子中,`filter(n -> n > 5)`是一个lambda表达式,表示筛选条件。Stream API的链式调用使得代码可读性极强,而且由于延迟执行的特性,筛选操作仅在最终的终端操作(如collect)执行时才真正进行。 Java 8还...
在这个例子中,`Person::getName`是一个方法引用,它相当于传递了一个lambda表达式 `(Person p) -> p.getName()`,将Person对象映射为它们的名字。 映射操作在实际开发中非常有用,它可以用于数据转换、类型适配、...
在Java中,Proxy模式主要依赖于Java的动态代理机制,这通常涉及到`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个核心接口。`Proxy`类用于生成代理对象,而`InvocationHandler`接口定义了...
Java通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现这一功能。动态代理通常用于AOP(面向切面编程)或事务管理,提供一种方式在不修改原有代码的情况下增强或拦截对象的行为。...
在这个例子中,`ProxyFunction`类需要实现`InvocationHandler`接口,并在`invoke()`方法中添加代理逻辑,如记录日志或验证操作。 动态代理模式在很多场景下都非常有用,例如在AOP(面向切面编程)中,它可以用来...
在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `java.lang.reflect.InvocationHandler`。`Proxy` 类用于生成代理对象,而`InvocationHandler`接口定义了代理对象的方法调用应该如何处理。 ...
当我们有一个接口和它的实现类,我们可以通过动态代理创建一个与该接口兼容的对象,该对象在调用接口方法时,可以执行一些额外的操作。 1. Java动态代理机制: - 首先,我们需要定义一个接口,这是所有代理对象...
在这个例子中,`MyInvocationHandler`实现了`InvocationHandler`接口,`invoke`方法中包含了调用前后的拦截操作。`MyService`和`MyServiceImpl`是业务接口和服务实现,`main`方法中通过`Proxy.newProxyInstance`创建...