java动态代理--代理接口无实现类
2016-12-02 12:18
507 查看
使用通过接口定义,或解析接口注解等完成相关功能,如mybatis的SqlSession.getMapper的实现
1.接口定义
[java] view
plain copy
print?
package cn.proxy;
public interface IHello {
String say(String aa);
}
2.代理实现
[java] view
plain copy
print?
package cn.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理代理类
*
*/
@SuppressWarnings("unchecked")
public class FacadeProxy implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("接口方法调用开始");
//执行方法
System.out.println("method toGenericString:"+method.toGenericString());
System.out.println("method name:"+method.getName());
System.out.println("method args:"+(String)args[0]);
System.out.println("接口方法调用结束");
return "调用返回值";
}
public static <T> T newMapperProxy(Class<T> mapperInterface) {
ClassLoader classLoader = mapperInterface.getClassLoader();
Class<?>[] interfaces = new Class[]{mapperInterface};
FacadeProxy proxy = new FacadeProxy();
return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
}
}
4.运行
[java] view
plain copy
print?
package cn.proxy;
public class Test {
public static void main(String[] args) {
IHello hello = FacadeProxy.newMapperProxy(IHello.class);
System.out.println(hello.say("hello world"));
}
}
运行结果:
[plain] view
plain copy
print?
接口方法调用开始
method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)
method name:say
method args:hello world
接口方法调用结束
调用返回值
1.接口定义
[java] view
plain copy
print?
package cn.proxy;
public interface IHello {
String say(String aa);
}
2.代理实现
[java] view
plain copy
print?
package cn.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理代理类
*
*/
@SuppressWarnings("unchecked")
public class FacadeProxy implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("接口方法调用开始");
//执行方法
System.out.println("method toGenericString:"+method.toGenericString());
System.out.println("method name:"+method.getName());
System.out.println("method args:"+(String)args[0]);
System.out.println("接口方法调用结束");
return "调用返回值";
}
public static <T> T newMapperProxy(Class<T> mapperInterface) {
ClassLoader classLoader = mapperInterface.getClassLoader();
Class<?>[] interfaces = new Class[]{mapperInterface};
FacadeProxy proxy = new FacadeProxy();
return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
}
}
4.运行
[java] view
plain copy
print?
package cn.proxy;
public class Test {
public static void main(String[] args) {
IHello hello = FacadeProxy.newMapperProxy(IHello.class);
System.out.println(hello.say("hello world"));
}
}
运行结果:
[plain] view
plain copy
print?
接口方法调用开始
method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)
method name:say
method args:hello world
接口方法调用结束
调用返回值
相关文章推荐
- Java动态代理实现接口方法
- java动态代理2 (cglib 不用实现接口)
- java反射和动态代理实现接口记录
- java动态代理--代理接口无实现类
- java动态代理--代理接口无实现类
- Java动态代理实现接口invocationHandler
- java动态代理--代理接口无实现类
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP(转)
- 使用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- 使用Java动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池 Z
- Java动态代理实现AOP
- Java动态代理实现
- 用Java动态代理实现AOP
- AOP系列之三:用Java动态代理实现AOP
- 设计模式:用Java动态代理实现AOP