AOP的目的
AOP(Aspect Oriented Programming)面向切面编程,是属于OOP概念的一个补充,可以设想以下场景:我们在做一个学籍管理系统,我们需要将不同角色(学生、老师、管理员等)的每个操作都写入日志里面,因为可能类型角色不多,我们可以这样写
需要无无聊聊写入日志的学生类其他的教师类或者管理员类也可以这样写。可是,如果出现角色类型越来越多的话,每个角色类都这样写的话,每段代码都具有log()代码,这样的话代码冗余量高;并且,当我们需要改动log()方法时,则需每个角色类去修改。因此,可以将其抽象成日志类或者可以将其抽象成为相应的接口。
通过静态Log类来实现写入日志这样当我们需要改动log()方法时,只需要改动Log类的方法就好,这样的话并无需要对整体代码进行改动,可以较好地解决刚刚那个问题。
可是,随着需求的增多,系统规模的变大,即便运用上述的方法,也可能无可避免一个新的问题。假设有一个场景是这样的,学生因为年级、专业的不同可能具有不同的权限,老师因为专业、职位的不同也有不同的权限,而我又不想为仅仅是一两个特殊的方法而新增加相应的类,所以就直接在student类里面像写入日志那样,加入权限的验证的功能,ok,这就搞定;可是如果某一天,我又需要加入其他与老师、学生本身无关的功能(异常处理、错误监控)等等,这样就会使我们原本的核心业务类变得不纯粹(不仅仅包含核心业务功能,也包含一些其他辅助的功能)。可是,如果想我们的类仅包含核心业务功能,那些辅助功能不会出现在我们的代码中,只是我们需要的时候,才会被系统调用,出于这种考虑,就出现了AOP(面向切面编程)。
AOP粗糙解释
AOP面向切面编程会将代码动态地切入到我们需要的地方,在我们需要的地方来运行。只需要定义好这个切面(切面函数:要进行什么操作,切入点:在什么时候进行),那么编译器就会将切面函数的代码在编译期间,写进相应地方(切入点)的代码的.class文件中(织入)。
AOP的实现技术有AspectJ和spring框架的AOP。
网友评论