本文共 1398 字,大约阅读时间需要 4 分钟。
在学AOP的时候看到了动态代理的概念,然后写了一个helloworld。
Service.java
package bean;public interface Service { public void service();}ServiceImpl.java
package bean;public class ServiceImpl implements Service { //业务方法 public void service() { // TODO Auto-generated method stub System.out.println("i'm servicing"); }}MyInvocationHandler
这里的 method可以调用 method.getName();返回调用了哪个方法
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyInvocationHandler implements InvocationHandler { // 要代理的对象 即Service private Object service = null; // 构造方法 public MyInvocationHandler(Object service) { this.service = service; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object result = null; System.out.println("服务即将开始..."); result = method.invoke(service, args); System.out.println("服务已经结束!"); return result; }}ServiceTest.java用的JUNIT
import java.lang.reflect.Proxy;import org.junit.After;import org.junit.Before;import org.junit.Test;import proxy.MyInvocationHandler;import bean.Service;import bean.ServiceImpl;public class ServiceTest { @Test public void proxy() { Service service = new ServiceImpl(); Service proxy = (Service) Proxy.newProxyInstance(service.getClass() .getClassLoader(), service.getClass().getInterfaces(), new MyInvocationHandler(service)); proxy.service(); }}结果: