JavaSpring【五、AOP基础】

概念:

AOP——面向切面编程,通过预编译/动态代理实现程序功能的统一维护
主要功能是:日志、性能统计、安全控制、事务处理、异常处理

实现方式

  • 预编译——AspectJ
  • 动态代理——SpringAOP、JbossAOP

常用概念

  • Advice通知的类型

Spring的AOP实现

  • 纯Java实现,无需特殊编译,不需要控制类加载器
  • 只支持方法执行连接点
  • 目的是提供一种APO与SpringIOC之间的整合
  • 与AspectJ相比,SpringAOP并不全面

有接口和无接口的SpringAOP的区别(没看懂)

  • 有接口,默认使用标准JavaSErvice动态代理作为AOP代理
  • 无接口使用CGLIB代理

配置、切面实现、切入点,切入方式

Demo:
首先需要增加依赖包

在Spring.xml中配置切面

切入点

切面实现

带参切入方法实现

测试类

带参切入点测试结果

Introductions引入

  • 简介允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现来代表这些对象
  • 由 aop:aspect 中的 aop:declare-parents 元素声明该元素用于声明所匹配的类型拥有一个新的parent
    例如:有个Service提供server服务,想在不更改Service代码的前提下对该Service增加验证,即可以定义一个接口和实现,再通过Introductions为Service增加新的接口,使Service可以通过验证后再执行server
    Demo:
    声明一个接口,并提供实现

想要引入的类

配置

Test方法

执行结果

advisor

  • 就像一个小的自包含的方面,只有一个advice
  • 切面自身通过一个bean表示,并且必须实现某个advice接口,同事,advisor也可以很好的利用AspectJ的切入点表达式
  • Spring通过配置文件中的aop:advisor 元素支持advisor 实际使用中大多数情况下他会和transactional advice配合使用
  • 为了定义一个advisor的优先级以便让advice可以有序,可以使用order属性来定义advisor的顺序
    例如:该标签只是切入的另一种方式,只需要配置切入点和实现了通知接口的类即可实现切面
    Demo:
    配置

实现了Advice接口的实现类

切入点测试调用方法

测试

结果

posted @ 2017-05-09 16:48  l.shane  阅读(186)  评论(0编辑  收藏  举报