在本周的项目中第一次尝试了aop这个鼎鼎大名的东西,之前一直以为这个东西会很难理解,就没有接触,不过再真正接触之后发现基本的使用仍是很简单的,固然有这种感受少不了学长的帮助,感谢张喜硕学长。spring
aop是什么呢?用于干什么?post
即aop的做用就是去掉代码的冗余,使程序的结构更加清晰。虽然去除冗余代码也可一经过抽象继承来实现,但这会让你继承或实现一些和业务并不相关的类或接口。this
spring的aop是经过动态代理实现的。spa
代理模式的定义以下:.net
为其余对象提供一种代理以控制对这个对象的访问。好比A对象要作一件事情,在没有代理前,本身来作,在对A代理后,由A的代理类B来作。代理实际上是在原实例先后加了一层处理,这也是AOP的初级轮廓。
代理又分为静态代理和动态代理,这里再也不细说,想要更深刻的了解能够看看这篇文章代理
而要如何在spring中使用aop呢?不要着急,接着往下看:对象
即是要知道切面应该用在那了,对此你可使用不少方法:blog
execution:用于匹配方法执行的链接点;
within:用于匹配指定类型内的方法执行;
this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;
target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;
args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;
@within:用于匹配因此持有指定注解类型内的方法;
@target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;
@args:用于匹配当前执行的方法传入的参数持有指定注解的执行;
@annotation:用于匹配当前执行方法持有指定注解的方法;
就像这样:继承
固然关于各个参数的具体用法,能够另写一篇文章了,若是想要了解能够参看这篇文章。接口
在上面的方法中就是切了有HostOwnerCheck这个注解的方法
而后就是编写你对这个方法有些什么操做,能够分别编写方法执行前,执行后……要作什么
好比下面就是
方法执行前判断是否有权限,若是没有就抛出一个方法:
这样,一个简单的切面就完成了。