java动态代理--代理接口无实现类
转载
使用通过接口定义,或解析接口注解等完成相关功能,如mybatis的SqlSession.getMapper的实现
1.接口定义
1. package cn.proxy;
2.
3. public interface IHello {
4. String say(String aa);
5. }
2.代理实现
1. package cn.proxy;
2.
3. import java.lang.reflect.InvocationHandler;
4. import java.lang.reflect.Method;
5. import java.lang.reflect.Proxy;
6.
7. /**
8. * JDK动态代理代理类
9. *
10. */
11. @SuppressWarnings("unchecked")
12. public class FacadeProxy implements InvocationHandler {
13. @Override
14. public Object invoke(Object proxy, Method method, Object[] args)
15. throws Throwable {
16. "接口方法调用开始");
17. //执行方法
18. "method toGenericString:"+method.toGenericString());
19. "method name:"+method.getName());
20. "method args:"+(String)args[0]);
21. "接口方法调用结束");
22. return "调用返回值";
23. }
24.
25. public static <T> T newMapperProxy(Class<T> mapperInterface) {
26. ClassLoader classLoader = mapperInterface.getClassLoader();
27. new Class[]{mapperInterface};
28. new FacadeProxy();
29. return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
30. }
31. }
4.运行
1. package cn.proxy;
2.
3. public class Test {
4. public static void main(String[] args) {
5. class);
6. "hello world"));
7. }
8. }
运行结果:
1. 接口方法调用开始
2. method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)
3. method name:say
4. method args:hello world
5. 接口方法调用结束
6. 调用返回值
7.