一、使用JDK创建实现目标对象所有接口的一个代理对象。
public class JDKProxyFactory implements InvocationHandler{
private Object targetObject;
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
/**第一个参数表示目标对象类加载器,第二个参数代表目标对象实现的所有接口,第三个参数指目标对象进行方法调用时,由该对象进行拦截(调用invoke方法)**/
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),this.targetObject.getClass().getInterfaces(),this);
}
/**代理类拦截后调用该方法**/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
PersonServiceBean personServiceBean = (PersonServiceBean)this.targetObject;
Object result = null;
/**代理对象将方法的访问委派给目标对象**/
if(personServiceBean.getUser() != null){
result = method.invoke(this.targetObject, args);
}
return result;
}
}
二、使用cglib创建目标对象的代理对象,该对象是目标对象的子类对象。
public class CGlibProxyFactory implements MethodInterceptor{
private Object targetObject;
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
Enhancer enhancer = new Enhancer();
/**产生目标类的子类,在该子类中会覆盖所有非final修饰符的方法*/
enhancer.setSuperclass(this.targetObject.getClass());
/**设置回调方法的对象(回调intercept方法)**/
enhancer.setCallback(this);
return enhancer.create();
}
@Override
/**
* proxy 代理对象
* method 拦截的方法
* args 方法的输入参数 methodProxy 方法的代理对象
*/
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
PersonServiceBean personServiceBean = (PersonServiceBean)this.targetObject;
Object result = null;
/**代理对象将方法的访问委派给目标对象**/
if(personServiceBean.getUser() != null){
result = method.invoke(this.targetObject, args);
}
// TODO Auto-generated method stub
return null;
}
}
分享到:
相关推荐
java代理机制 JDK动态代理和cglib代理 详解
NULL 博文链接:https://jummy.iteye.com/blog/255628
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
java静态代理 jdk动态代理 cglib动态代理 代理原理
jdk 和 cglib的简单动态代理,闲来无事 写写。有需要的朋友可以看看
Spring框架的AOP中重要的一个知识点,动态代理,springAOP框架会根绝实际情况选择使用jdk的动态代理还是cglib的动态代理
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
实现java动态代理的两个实例,jdk动态代理和cglib
jdk 的动态代理和CGLIB代理
静态代理、jdk动态代理、cglib动态代理
JDK动态代理和Cglib动态代理实例源码
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
该资源里面有Jdk动态代理,cglib动态代理,反射和拦截器(链)示例,里面也有所需要的jar包,下载下来导入eclipse即可运行,有问题请问我
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1711218
JAVA JDK静态代理、动态代理、CGlib代理的代码演示 为对象增加功能
JDK代理和Cglib代理,下载源码清楚了解二者区别
jdk动态代理与cglib动态度代理的区别原理代码jar包
动态代理的代码例子 里面敲好了注释 搭配文章观看更好
动态代理是使用jdk的反射机制,创建对象的...jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。