扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
SpringAOP是利用代理模式,在运行时生成一个目标对象的代理,并且使用代理代替目标对象,整个过程对使用者透明,使用者无法像使用目标对象一样使用代理对象,代理对象类型是目标对象所属类的子类或者接口实现,北京IT培训认为这个子类也是在运行时动态生成,这个生成子类的过程使用操作字节码技术,Spring框架中使用两种字节码技术:JDK动态代理和CGLIB,当目标类实现了接口时使用JDK动态代理,否则使用CGLIB代理。
公司主营业务:成都网站设计、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出密云免费做网站回馈大家。
AOP的实现包含下面几个步骤:根据配置或注解解析切面。
生成AOP代理对象,给目标对象生成一个代理类以及代理类实例,根据解析出的切面,生成通知链设置到代理对象,在代理的回调中会执行通知链。
把AOP代理对象注册到容器中代替目标对象,当使用者向容器请求目标bean时,容器会返回代理对象。
下面对这几个步骤逐一的分析。
切面解析在分析切面解析过程之前,首先先了解一下几个关键的接口,看下面的类图。
PointCut:描述切点,在进行切点匹配时,使用ClassFilter进行类匹配,MethodMatcher进行执行方法匹配。
Advice:通知,AfterAdvice后通知,BeforeAdvice前通知,DynamicIntroductionAdvice引用通知,环绕通知通过Interceptor实现。
Advisor:通知器,也就是切面,PointcutAdvisor切点通知器,IntroductionAdvisor引用通知器。
在创建AOP代理之前需要把相关的切面配置解析成上面类图中的接口子类的对象,对于ProxyFactoryBean来说,没有这个过程,因为这种方式下不能使用切点。
切面解析完成之后,把解析出的通知添加通知链中,AOP代理对象引用该通知链执行切面通知逻辑。
对于aop标签方式和注解方式添加通知链这个动作的代码是类似的,解析切面这个过程有些差异。
(1)AOP的各种实现
在编译器修改源代码、在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码。以下是各种实现机制的比较:
类别分为静态AOP(包括静态织入)和动态AOP(包括动态代理、动态字节码生成、自定义类加载器、字节码转换)。
静态织入:
a、原理:在编译期,切面直接以字节码形式编译到目标字节码文件中 ;
b、优点:对系统性能无影响;
c、缺点:不够灵活;
动态代理 :
a、原理:在运行期,目标类加载后,为接口动态生成代理类。将切面织入到代理类中;
b、优点:更灵活;
c、缺点:切入的关注点要实现接口;
AOP切面算是比较理论的东西,使用较少,属于总结出来的理论,大多数人都知道,但不会专门地使用,一般都是默认会操作。比如将一些通用的方法单独写一个类,这些都是写代码时候自己会用的,并不算是很特别、专门拿出来使用、研究的工具
工作中java开发,使用最多的为增删改查,其次是用debug来调试程序解决问题,联调测试等等。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流