AOP(面向方面的编程)是针对面向编程的编程,这是OOP的延续。
面向对象的编程具有三个特征:包装,继承,多态性。包装是将每个函数分散到不同的对象中,以便不同的类具有不同的责任。这样,可以重复使用代码,并可以降低复杂性。
但是,在此过程中,代码变为分散,并且还增加了代码的可重复性。例如,记录日志。如果需要记录几个类,则每个类都需要相应的方法。
如果这些代码是在单独的类中写的,使用单独的方法,然后在不同类中调用并恢复类和类之间的耦合,则该类的更改将影响其他类别。有更有效的方法吗?
我们可以通过预编辑方法和运行时动态代理方法动态地将代码切入类指定的位置,以便在不修改源代码的情况下动态添加一些功能。这是AOP。
这是AOP的一些相关术语:
执行AspectJ时,我们需要使用AJC编译器来编译需要编织的方面和Java源代码。获得字节代码后,我们可以使用Java命令执行。
AJC编译器将首先调用Javac将Java源代码编译到字节代码中,然后根据该方面定义的点曲线找到相应的Java字节代码部分,并使用相应的建议操作修改源代码的字节代码。
最后,可以使用从方面编织的Java字节代码,然后可以正常使用此字节代码。
也许以上概念介绍了您的面孔,您可以通过以下代码直观地感受到appectj的魔力。
也就是说,使用方面注释一个类,表明此类是剪切的类。
axpectj支持三种访问类型:
匹配任何角色,只有一个元素
匹配任何字符都可以匹配多个元素。指示课时,必须
这意味着所有根据类型匹配指定类的类都必须遵循类名称,例如,所有继承的子类
联接点的定义需要遵循某些规则,例如以下执行
在extackJ中,可以通过“ &&”,“ ||”,“!”组合入口点的表达公式。和其他操作员。
表达执行( * * .add(int,..))||执行( * * * .sub(int,..))
任何类别中的第一个参数是添加方法或int类型的sub方法
表达!执行( * * .add(int,..))
含义匹配不是INT方法的INTS类型的第一个参数的执行。另外,还有其他修饰符可供选择,不同的修饰符与不同的表达式规则相对应。这是与执行相对应的表达式规则。
Typepattern)异常处理与相应表达式规则相对应的不同修饰符:不同:
MethodPattern [@note] [访问权限]返回值类型[类名称。]方法名称(参数)[抛出异常类型] structorpatter [@note] [access persissions] [class inne] [class name。] new(parameter)[抛出异常类型] fieldPattern [@note] [访问权限]变量类型[类名称。]变量名称Typepatter的单独用途来表达任意类型,匹配任意字符串,指示单独使用时匹配任意类型,匹配自身和子类别,Alsothere是很多不确定性。您也可以使用`&&&& cut点表达式使用`&& &&,然后将此表达式定义为切点。
它可以定义,例如:(前通知),后返回
作为对OOP的补充,AOP在开发过程中将非常有用,例如对日志的打印和上传,监视用户行为,方法时间监视等。
当然,硬币有两个方面,一个工具具有他的优势和缺点。使用extackJ在编译器中做事,因此它肯定会增加程序编译的时间。
此外,由于其入口点是固定的,尽管它可以满足我们许多场景的需求,但仍然存在某些局限性。如果您对字节代码有深刻的了解,并且想更愉快地播放字节代码。该工具仍然太局促了。
简而言之,作为AOP工具的FactexJ为我们提供了极大的便利。使用可以帮助我们节省很多不必要的麻烦,同时,我们可以改善代码的清洁度。为什么不这样做?