SpringAOP代理的详细介绍
前言:uff1a
刚开始的时候,我还只是一知半解。最近我遇到了一个问题,我读了一些与春天有关的知识。我对这个问题有了更深的理解,所以把它写下来,与大家分享。
我们知道春天支持各种AOP方法,基于AOP和AspectJ基于AOP基础编织春天的代理。如果一个类实现一个或多个接口,弹簧将使用默认的JDK动态代理,如果它不实现任何接口,它将使用CGLIB代理。当然,我们也可以改变这些设置手动。也很容易掉坑里。如果错误的代理设置,beannotofrequiredtypeexception会出现注射时。
首先,谈谈JDK动态代理,而代理接口,对象实现的接口和接口B.弹簧创建一个代理对象实现的接口和接口B,但需要注意的是,代理对象无关的对象,我们可以使用代理对象的接口的任何一个,但我们不能将代理对象到A班。
如果我们现在有以下接口和类。
interfacea公共接口{
}
公共课的课堂,实现了interfacea {
}
然后我们使用依赖注入来获取对象,只能interfacea。如果类型是写为ClassA,beannotofrequiredtypeexception就会出现。因为这实际上是注入这里的对象是一个实现了interfacea代理对象,也与ClassA无关。这种情况下,弹簧建议我们使用接口编程。如果你要注入的类,你需要使用CGLIB作为代理,即添加代理的目标类=真正的AOP配置。
然后再谈CGLIB代理。这是一个代理类,所以如果我们使用这个代理,我们可以把ClassA和interfacea在上述情况。
最后,谈谈AspectJ的组织基于AOP。所谓的编织是添加或修改生成的类文件的代码,在编译时和运行时编织编织。如果你使用AspectJ和反编译一个编织班,你会发现这类文件已被修改,通过AspectJ。因为编织特点AspectJ,问题自参考和基于代理的AOP两剂将不会出现在AspectJ。
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。