SpringAOP实现原理的详细解释与实例
Spring AOP实现原理的详细解释与实例春天的AOP的实现依赖JDK动态代理和CGLIB代理。
以下是简要介绍了JDK动态代理和CGLIB代理
JDK动态代理:代理的对象必须实现一个界面。它通过在操作期间创建接口实现类来实现目标对象的代理。
CGLIB代理:实现原理类似于JDK动态代理,但代理对象,它产生在运行目标类的子类extension.cglib是一种高效的代码生成软件包,以ASM为基础实现的(开放源代码java字节码编辑类库)操作的字节码,并且具有比JDK更好的性能。
在施普灵河,代理的代理对象将在JDK的方式实施时,有一个接口,如果没有接口,该prixy代理对象将在CGLIB的方式实现,具体如下:
/ / JDK模式:人的服务接口的实现类,personservicebean,
公共课jdkproxyfactory实现InvocationHandler {
私有对象目标物体;
createproxyintance公共对象(对象目标物体)
{
这个物体目标=目标物体;
返回proxy.newproxyinstance(this.targetobject.getclass()GetClassLoader()()),
This.targetObject.getClass()GetInterfaces(),这个);
}
公共对象调用(代理对象,方法,对象{ } args)
抛出Throwable {
personservicebean人=(personservicebean)this.targetobject;
对象结果= null;
如果(person.getuser()!= null)
{
结果:method.invoke(目标物体,args);
}
返回结果;
}
}
/ /使用CGLIB包:personservicebean的实现类,和没有人的服务接口,
公共课cglibproxyfactory实现methodinterceptor {
私有对象目标物体;
createproxyinstance公共对象(对象目标物体)
{
这个物体目标=目标物体;
增强剂=新增强子();
Enhancer.setSuperclass((这个目标物体。getClass) / /);设定目标类,类将覆盖父类中的所有的最终方法
Enhancer.setCallback(本); / /回调
返回enhancer.create();
}
公共对象(对象代理,拦截方法,对象{ }参数,
methodproxy methodproxy抛出Throwable){
personservicebean人=(personservicebean)this.targetobject;
对象结果= null;
如果(person.getuser()!= null)
{
结果:methodproxy.invoke(目标物体,args);
}
返回null;
}
}
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。