发表于: 2017-09-23 23:52:01

1 679


今天完成的事情,

开周会,,

学习SpringAOC.面向切面编程.

  • 面向切面编程的基本思想是在极少影响原程序的代码的前提下,在程序中的某些地方,使用某些方式,不可见的(即不在原程序中添加其他代码)为原程序切入一些额外的功能.
  • 优点.
  • 减少代码间的耦合性,使功能具有拔插性,保证自己代码的清洁型。
  • 能够让你只关注自己的代码,不需要关注切面是如何实现的.


我的理解就是比如一个正在运转的机器,在不影响它运转的情况下,用一些方式给它增加其他功能.

切面一共有五种通知
  1. Before 某方法调用之前发出通知。
  2. After 某方法完成之后发出通知,不考虑方法运行的结果。
  3. After-returning 将通知放置在被通知的方法成功执行之后。
  4. After-throwing  将通知放置在被通知的方法抛出异常之后。
  5. Around 通知包裹在被通知的方法的周围,在方法调用之前和之后发出通知

  • 一个切面没必要通知(advise)应用程序中所有的连接点(join point)。切点(pointcuts)能够精确定位被切面通知的连接点。

  • 如果通知(advice)定义了切面what和when,那切点就定义的切面的 where。切点决定去匹配通知们应该去编织的一个或者多个连接点。通常需要使用类或者方法的名字来指定切点,或者通过正则表达式去匹配类和方法的名字


. Spring使用AspectJ的切点表达式去定义Spring切面

AspectJ标志符解释
args()定制join-point去匹配那些参数为指定类型的方法的执行动作。
@args()定制join-point去匹配那些参数被指定类型注解的方法的执行动作
execution()开始匹配在其内部编写的定制
this()定制join-pont去匹配由AOP代理的Bean引用的指定类型的类。
target()定制join-point去匹配特定的对象,这些对象一定是指定类型的类。
@target()定制join-point去匹配特定的对象,这些对象要具有的指定类型的注解。
within()定制join-point在必须哪一个包中。
@within()定制join-point在必须由指定注解标注的类中。
@annotation定制连接点具有指定的注解。
  • 只有execution用来执行匹配,其他标志符都只是为了限制/定制他们所要匹配的连接点的位置。

execution(* concert.Performance.perform(..))
    && within(concert.*))
  • execution意思是当某方法执行时触发。
  • 第一个 * 意思配备任何一个perform方法,是不在乎方法返回类型是什么。
  • concert.Performance是为了定位perform()方法再哪个类中。
  • .. 代表配备任何一个perform方法,不在意他的参数列表是啥。

如果你想限定切点的范围,只匹配在concert包被调用的perform()。你可以使用within()标识符

这里的 && 就是与的意思,当然还有 或 || ,非 ! ,如果你是在XML配置文件中编写切面,那就建议使用 and or not 来替代他们


在表达式中,可以使用bean()标识符,通过bean的ID来识别一个bean。例如:

execution(* concert.Performance.perform())
and bean('woodstock')

环绕增强允许在目标类方法调用前后织入横切逻辑,它综合实现了前置、后置增强两者的功能.


参考师兄代码写环绕通知.

明天再对其中的细节做研究.

给师兄们演习小课堂.

明天的计划,

大扫除,

拆分禅道,

分享小课堂.

根据师兄指出的知识点作了解,

提交任务二.

深度思考.

环绕通知加深理解..

先写下来.一个一个来.

遇到的问题,

写环绕通知时,没有将SERVICE指定正确的位置,研究很长时间...

报错No goals have been specified for this build

配错命名空间可能会报这样的错误.

通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明

测试接口时,拼错了delete..


任务开始时间2017-9-15

任务结束时间2017-9-25

无延期风险

禅道;http://task.ptteng.com/zentao/task-view-10854.html




返回列表 返回列表
评论

    分享到