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");
}
』
好了,拷贝上面的自己运行看看就知道了,原来切面就是这么回事。
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");
}
』
好了,拷贝上面的自己运行看看就知道了,原来切面就是这么回事。
本文介绍了一个使用Java实现的代理模式示例,通过日志处理器(LogHandler)为接口IHello的具体实现HelloSpeaker添加日志记录功能。该示例展示了如何利用Java反射API创建动态代理对象,并在调用目标方法前后添加额外的行为。
&spm=1001.2101.3001.5002&articleId=1450224&d=1&t=3&u=0b244be344404746b98b7454cf396505)
13万+

被折叠的 条评论
为什么被折叠?



