在学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();
}
}
结果: