Spring AOP的概念

1.Spring的动态代理虽然封装了CGLIB和JDK动态代理,但是我们用Spring时候依然不会用FactoryProxy直接编程式的创建代理对象,我们是希望我们可以从spring容器种直接获得代理对象也就是bean,这就是我们的Spring AOP。

2.AOP和Spring AOP:

OOP表示面向对象编程,是一种编程思想,AOP表示面向切面编程,也是一种编程思想,而我们上 面所描述的就是Spring为了让程序员更加方便的做到面向切面编程所提供的技术支持,换句话说,就是Spring提供了一套机制,可以让我们更加容易的来进行AOP,所以这套机制我们也可以称之为Spring AOP。

上面我们已经提到Advisor、Advice、PointCut等概念了,还有一些其他的概念,首先关于AOP中的 概念本身是比较难理解的,Spring官网上是这么说的:

Let us begin by defining some central AOP concepts and terminology. These terms are not Spring-specific. Unfortunately, AOP terminology is not particularly intuitive. However, it would be even more confusing if Spring used its own terminology 

意思是,AOP中的这些概念不是Spring特有的,不幸的是,AOP中的概念不是特别直观的,但是,如果Spring重新定义自己的那可能会导致更加混乱

1. Aspect:表示切面,比如被@Aspect注解的类就是切面,可以在切面中去定义Pointcut、Advice等等

2. Join point:表示连接点,表示一个程序在执行过程中的一个点,比如一个方法的执行,比如一个异常的处理,在Spring AOP中,一个连接点通常表示一个方法的执行。

3. Advice:表示通知,表示在一个特定连接点上所采取的动作。Advice分为不同的类型,后面详细讨论,在很多AOP框架中,包括Spring,会用Interceptor拦截器来实现Advice,并且在连接点周围维护一个Interceptor链

4. Pointcut:表示切点,用来匹配一个或多个连接点,Advice与切点表达式是关联在一起的,Advice将会执行在和切点表达式所匹配的连接点上

5. Introduction:可以使用@DeclareParents来给所匹配的类添加一个接口,并指定一个默认实现

6. Target object:目标对象,被代理对象

7. AOP proxy:表示代理工厂,用来创建代理对象的,在Spring Framework中,要么是JDK动态代理,要么是CGLIB代理

8. Weaving:表示织入,表示创建代理对象的动作,这个动作可以发生在编译时期(比如Aspejctj),或者运行时,比如Spring AOP

上面说到的Aspject中的注解,其中有五个是用来定义Advice的,表示代理逻辑,以及执行时机:

1. @Before

2. @AfterReturning

3. @AfterThrowing

4. @After

5. @Around

我们前面也提到过,Spring自己也提供了类似的执行实际的实现类:

1. 接口MethodBeforeAdvice,继承了接口BeforeAdvice

2. 接口AfterReturningAdvice3. 接口ThrowsAdvice

4. 接口AfterAdvice

5. 接口MethodInterceptor

Spring会把五个注解解析为对应的Advice类:

1. @Before:AspectJMethodBeforeAdvice,实际上就是一个MethodBeforeAdvice

2. @AfterReturning:AspectJAfterReturningAdvice,实际上就是一个AfterReturningAdvice

3. @AfterThrowing:AspectJAfterThrowingAdvice,实际上就是一个MethodInterceptor

4. @After:AspectJAfterAdvice,实际上就是一个MethodInterceptor

5. @Around:AspectJAroundAdvice,实际上就是一个MethodInterceptor

你可能感兴趣的:(Spring AOP的概念)