package com.gqc.service;
//主业务接口
public interface ISomeService {
//目标方法
String dofirst();
void doSecond();
}
package com.gqc.service;
//目标类
public class SomeServiceImpl implements ISomeService {
public String dofirst() {
System.out.println("执行dofirst");
return "abcde";
}
public void doSecond() {
System.out.println("执行doSecond");
}
}
package com.gqc.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.gqc.service.ISomeService;
import com.gqc.service.SomeServiceImpl;
public class MyTest {
public static void main(String[] args) {
final ISomeService target=new SomeServiceImpl();
//使用JDK的proxy动态代理 要求目标类必须实现接口
//以为底层的执行原理 和静态代理相同
ISomeService service=(ISomeService) Proxy.newProxyInstance(
target.getClass().getClassLoader(), //目标类的类加载器
target.getClass().getInterfaces(), //目标类所实现的所有接口
new InvocationHandler() {
//proxy 代理对象
//method 目标方法
//args 目标方法的参数列表
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//调用目标方法
Object result = method.invoke(target, args);
if (result!=null) {
result = ((String) result).toUpperCase();
}
return result;
}
});
String result = service.dofirst();
System.out.println("result="+result);
//service.doSecond();
}
}