发表于: 2017-09-23 23:52:01
1 680
今天完成的事情,
开周会,,
学习SpringAOC.面向切面编程.
- 面向切面编程的基本思想是在极少影响原程序的代码的前提下,在程序中的某些地方,使用某些方式,不可见的(即不在原程序中添加其他代码)为原程序切入一些额外的功能.
- 优点.
- 减少代码间的耦合性,使功能具有拔插性,保证自己代码的清洁型。
- 能够让你只关注自己的代码,不需要关注切面是如何实现的.
我的理解就是比如一个正在运转的机器,在不影响它运转的情况下,用一些方式给它增加其他功能.
切面一共有五种通知
- Before 某方法调用之前发出通知。
- After 某方法完成之后发出通知,不考虑方法运行的结果。
- After-returning 将通知放置在被通知的方法成功执行之后。
- After-throwing 将通知放置在被通知的方法抛出异常之后。
- 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
评论