spring框架中AOP思想与各种配置详解

本文内容纲要:spring框架中AOP思想与各种配置详解

Spring中提供两种AOP支持:

1.基于代理的经典AOP

2.Aspectj注解配置AOP

**首先我们先了解什么是AOP,AOP(Aspect Oriented Programming)面向切面编程!**AOP采用了横向抽取机制(可能有人会说啥叫横向抽取机制,在这里先引入一个纵向继承的概念),取代了纵向继承的重复性代码(例如权限控制、性能监视、缓存)

spring AOP使用纯Java实现,主要通过代理方式向目标类(被代理的类织入增强代码)

Aspectj 是一个基于Java语言的AOP框架

纵向继承:Image

在图中,左边的传统的纵向继承方式,因为writelog在具体实现类userdao中无法被复用,所以此方法就被放到了所有的dao的父类BaseDao中

多态的特性,所有子类dao要加强代码时,经过父类的writelog方法,类似一种从上到下的关系;然而右边的是AOP思想下的代码增强,因为不

论是代理类UserDaoProxy,还是被代理类UserDao,都实现了同一个接口或是同一个父类,属于兄弟关系,实现了所谓的“横向”的切入机制!

而对于AOP中的一些术语,我觉得你们需要了解一下,以便于对下面的阅读有帮助!

Image针对这个图再补充一下,一个切点和一个advice的组合叫advisor!!

(1) 基于代理的经典AOP

通知:advice

Spring提供了 前置通知、环绕通知、后置通知、异常通知等等。

这些advice分别对应要实现的接口:MethodBeforeAdvice、MethodInteceptor、AfterReturningAdvice、ThrowsAdvice

就拿前置通知来举例子:

Image

这是在xml中的各个类的配置

Image

但其实你们会发现,我这里的advice没有指定要对哪个方法执行增强,因为dao可能会有好几种方法,但是有些并不需要增强,所以一,我们就需要一个带有特定切点的advice!

基于以上的配置进行修改,带有切点的切面!!

Image

一个切点和一个advice的组合:advisor

带有切点的切面,只需要在以上配置中再加一个:

Image之后在配置代理类时,把interceptorname换位这个带有切点的切面id

但是有没有发现前面的配置中,每一步生成代理类时,都需要主动去配置proxyFactoryBean来生成代理类,这样做很麻烦,所以这里又要引入****自动代理的概念!!

Image

Image

Image

(2) Aspectj配置AOP(推荐使用)

Image

2.1基于Aspectj注解形式

第一步:引入相应的jar包

Image

第二步:以Aspectj形式编写

Image

第三步:创建xml文档:

Image

2.2基于Aspectj的xml形式配置

Image这是以xml形式编写的aspect配置

本文内容总结:spring框架中AOP思想与各种配置详解

原文链接:https://www.cnblogs.com/Booker808-java/p/7855672.html

以上是 spring框架中AOP思想与各种配置详解 的全部内容, 来源链接: utcz.com/z/296829.html

回到顶部