我们都知道,Java是一种面向对象的语言,因此可以称呼所有内容。但是有一些缺点:当您需要将相同的公共行为引入没有继承的多个对象时,例如日志,安全检测等。,我们只能在每个对象行为中介绍这一公众,这会生成很多重复的代码,并且耦合程度将非常高,这不利于维护。因此,它正面临着剪切的方向()编程。可以说,通过AOP使对象更加完美,它是对其的补充。AOP注意的方式是水平的。与OOP的垂直方向不同,让我们在春季详细解释AOP。
让我们从动态AOP开始
Spring过去改变了最原始,最复杂的配置方法。目前,注释方法用POJO标记,POJO极大地简化了AOP的工作。周围...之前和周围...之后
expactjtest代码
请注意图纸文件中的陈述和命名空间:
运行结果如下:
从上面的代码可以看出,春季增强了所有类的测试方法,因此可以独立地将辅助功能(日志等)独立出现,并且也了解程序的耦合和扩展。实施AOP实施我们知道Spring是一个支持注释文件注释的AOP,也就是说,当配置文件具有此语句时,Spring将支持注释的AOP,因此分析从这里开始。
我们知道,如果声明了自定义注释,则在春季进行自定义注释,则必须在弹簧中注册的位置中的相应解析器。我们从:
在弹簧源代码中搜索全局搜索,我们在袋中发现了``org.springframework.ap ap.config'aopnamespacehandler`,然后打开此类搜索。
在课堂上,我们找到了这个功能
从上面的代码可以看出,当分析分析配置文件时,一旦遇到,您将使用解析器进行分析。接下来,我们功能的具体实现:
所有解析器均由接口实现,入口始于该功能。AntotationAwectJautoproxyCreator的解析功能如下:如下:
从上面的代码中,我们可以看到该方法中实现了特定的实现逻辑,并继续输入函数方法:
可以看出,源代码可以在函数中完成,主要是三件事,基本上是每行代码之一。
在功能的功能中寄存
AOP的实现基本上是由AnnotationAspectjautoproxycreator完成的。它可以与与注释定义的代理相匹配的bean匹配。我继续跟进方法:
在上面的代码中,我们看到该功能并继续跟进:
同时,我们还必须查看班级中的代码:
以上代码实现了自动注册类的功能。同时,它也被设计为优先问题。假设如果已经存在自动代理创建,并且现有的自动代理创始人与当前不一致,那么您需要根据优先级判断以判断哪个人要使用的是
处理代理 - 目标级和公开proxy属性Useclassproxyifnextary(ParserContext.get Regentry(),sourceEllement);这部分使代理目标级和公开了式式式式式式。
上述代码中使用的两种强制性使用方法**是`forceautoproxycreateseclassssssssssssssssssssssproxying`和forceautoprotoeeeeeeeeeeeeeeeeeeeeeeeeproxy'。强制使用过程也是设置过程。这两个函数的具体实现如下。
让我们谈谈这两个属性
当您使用并自动支持支持时,您可以以以下方式设置它
这里指的是目标对象,因此请致电。B不会执行B的交易,也就是说,交易不会得到增强。为了解决此问题,我们可以做到这一点:
然后将上述代码中的``this.b()`修改为(asservice)aopcontext.currentproxy())。b()`。
通过上述修改,您可以在增强时完成该方法的配对和方法
只需谈论JDK动态代理的CGLIB代理