Spring实战读书笔记
第四章:面向切面的Spring
Spring对AOP的支持在很多方面上借鉴了AspectJ项目,不过Spring对AOP的支持十分有限。由于SpringAOP构建在动态代理基础之上,所有Spring对AOP的支持局限于方法拦截。
切点表达式
-
在SpringAOP中要使用AspectJ的切点表达式语言来定义切点,不过Spring只支持AspectJ切点指示器的一个子集。
-
我们使用execution()指示器来配置切点。
-
我们可以使用&&、||、!操作符来将多个切点表达式连接在一起。在XML文件内,我们可以使用‘and’、‘or’、‘not’来代替操作符。
-
Spring还引进了一个新的bean()指示器,他允许我们在切点表达式中使用bean的ID来标识bean。
使用注解创建切面
-
首先定义切面:在类上面加上@Aspect注解,来声明这个类是一个切面。还有将这个类注入到SpringIOC容器中。
-
Spring可以使用AspectJ的注解来声明通知方法:@After、@Before、@AfterReturning、@AfterThrowing、@Around而且为了避免重复写相同的切点表达式,我们可以使用@Pointcut注解来声明一个切点表达式
-
还要在config类中启用AspectJ注解的自动代理:使用@EnableAspectJAutoProxy注解,放在配置类的上面。如果使用XML方式的话,则使用<aop:aspectj-proxy />元素。
环绕通知的创建
处理通知中的参数
-
利用args指示器可以获得方法中的参数,并传到通知中去。
在XML中声明切面
-
Spring提供了AOP命名空间让我们可以很好的通过XML文件来配置切面,有与注解相对应的<aop:before>、<aop:after>等等
-
还可以使用<aop:pointcut>定义切点