spring框架之切面编程步骤说明


spring框架之切面编程步骤说明

文章插图
 
今天学习内容安排如下:
  • 切面配置的核心三步骤 。
  • 传统sprin配置和AspectJ配置都学下 , xml和注解都使用下 。
  • 同时为了测试 , 补充说明一下spring的junit集成 , 几天前没来得及学的知识点 。
一、传统Spring AOP编程这种方式在现在的开发中基本不会使用 , 但为了更好地和AspectJ对比还是做一个了解 。
1切面编程开发三步骤
spring框架之切面编程步骤说明

文章插图
 
①确定要增强的target对象
也就是哪些类需要增强?对spring来说 , 目标就是bean对象 。
②配置增强
Advice通知 , 也就是我们要增强一个什么功能 , 会在②对应的类中说明 。
③配置切入点
即要拦截的连接点有哪些(方法)
  • id="myPointcut":切入点唯一标识 。
  • expression表达式:匹配方法的 。
expression=bean(*Service)表示在spring容器中 , 所有id/name以Service结尾的bean都能被拦截 。
④配置切面
也就是:要对哪些方法(pointcut) , 进行怎样的增强?(advice)
  • advice-ref="timeLogAdvice" , 即对应怎样的增强 。
  • pointcut-ref="myPointcut" , 即对应哪些方法需要增强 。
2编写传统aop的Advice通知类
spring框架之切面编程步骤说明

文章插图
 
①环绕通知
通知主要有四类 , 即增强的位置:
  • 前置通知MethodBeforeAdvice:在目标方法执行前实施增强 。
  • 后置通知AfterReturningAdvice:在目标方法执行后实施增强 。
  • 环绕通知MethodInterceptor:在目标方法执行前后实施增强 。
  • 异常抛出通知ThrowsAdvice:在方法抛出异常后实施增强 。
在这里因为我们需要在方法前后实施增强 , 所以我们使用环绕通知 , 需要实现对应接口 。
注意:接口不要弄混淆了 , 是org.aoplliance中的接口 , 不是cglib中的 。
spring框架之切面编程步骤说明

文章插图
 
②invoke方法
参数为Methodinvocation 。
③调用目标对象的方法
这个就相当于method.invoke() 。
④记录日志
这个涉及到日志配置文件的编写 。
3使用spring的junit集成测试
spring框架之切面编程步骤说明

文章插图
 
①@RunWith注解和@ContextConfiguration注解
  • 通过@RunWith注解 , 使用junit整合spring 。
  • 通过@ContextConfiguration注解 , 指定spring容器的位置 。
②@Autowired注解
通过@Autowired注解 , 注入需要测试的对象 , 在这里注意2点:
  • 将测试对象注入到测试用例中 。
  • 测试用例不需要配置<context:annotion-config/> , 因为使用测试类运行的时候 , 会自动启动注解的支持 。
③调用测试方法完成测试
二、Aspectj(xml)配置AOP上述传统方法中需要实现对应的通知接口 , 而在Aspectj中就不需要了 。
1Xml配置AOP开发方法还是三步:
  • 确定要增强谁?(bean)
  • 确认增强什么功能?(通知advice)
  • 确定需要增强的方法有哪些?(切入点pointcut)
而如何将它们对应起来就需要配置切面了 。
spring框架之切面编程步骤说明

文章插图
 
①②③和传统的配置是一样的 , 不再赘述 , 只说不同的地方 。
④配置切面
通知是有好几种的 , 重点也就是这个通知类型 , 将其弄懂了 , xml和注解也就简单了:
  • aop:before也就是前置通知 。
  • aop:after-returning也就是后置通知 。
  • aop:around 也就是环绕通知 。
  • aop:after-throwing也就是抛出通知 。
  • aop:after也就是最终通知 。
method:通知类中的方法名;pointcut-ref="myPointcut":注入切入点 。
2通知类的编写
因为测试方法和上述是差不多的 , 所以不再赘述 , 将测试结果放在一起说明:
spring框架之切面编程步骤说明

文章插图
 
配置文件中给指定方法设置通知的类型 , beforeTest方法就是前置通知 。


推荐阅读