Spring-AOP学习笔记-01 初识AOP
Posted Moon&&Dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-AOP学习笔记-01 初识AOP相关的知识,希望对你有一定的参考价值。
Spring AOP学习笔记
1 AOP概念和相关术语
Aspect Oriented Programming(AOP):面向切面编程,是面向对象编程(OOP)的一种补充,典型的就是Spring的事务管理。将比如,日志的记录,权限的校验,异常的处理这样非核心功能单独抽离出来,和核心功能解耦,横切在业务代码之上。
相关术语
-
Aspect
切面,在spring的aop里面,切面通常是一个类,对横切关注点的抽象
-
Join point
连接点,就是被拦截的点,简单来说,就是声明在什么时候,因为spring只支持方法的拦截,所以在spring中连接点可以理解为被拦截的方法
-
Pointcut
切入点,也可以叫切点,一般配合切点表达式定位到哪些方法,哪些类,什么地方,是对连接点拦截的定义,可以拦截一个连接点,也可以拦截多个连接点
-
Advice
通知,就是和Join point一起要做的事情,简单来说就是做什么事,就是拦截到连接点后,需要在这个连接点做什么事情
-
Weaving
织入,就是将切面中的通知应用到目标对象(Target Object)上,生成代理对象(AOP Proxy)的过程
2 基于XML配置
使用XML配置文件使用aop,需要加入一下xml约束
<beans xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
注意:需要和之前的spring配置文件合在一起,需要bean的约束文件。
配置好以上的文件后,就可以在spring配置文件中使用aop了,所有的aop配置,都是在aop:config
标签下,首先需要把代理目标类和增强类在ioc中注册,然后在aop中配置bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--需要被代理的类-->
<bean id="coreService" class="com.moon.point.CoreService"/>
<!--切面类-->
<bean id="aspect" class="com.moon.aspect.MyAspect"/>
<!--配置aop-->
<aop:config>
<!--配置aop切点-->
<aop:pointcut id="point" expression="execution(public * com.moon..*.*(..))"/>
<!--配置切面切入-->
<aop:aspect ref="aspect">
<!--配置通知方法-->
<aop:before pointcut-ref="point" method="logExecuteTime"/>
</aop:aspect>
</aop:config>
</beans>
3 切点表达式
切点表达式,就是去匹配需要代理的类的方法,可以匹配多个或者单个方法,切点表达式书写在aop切点配置中
<!--配置aop切点 id:切点id expression为切点表达式:表达式在execution()里书写-->
<aop:pointcut id="point" expression="execution(public * com.moon..*.*(..))"/>
正常方法签名对应的切点表达式
方法签名 | public void e() |
---|---|
切点表达式 | public void com.moon.point.CoreService.e(…) |
涉及到的通配符
*
:代表所有..
:代表类,参数
常用的表达式:
/* expression="execution(public * com.moon.point.CoreService.*(..))
该切点表示切如的方法为
修饰符 返回值 方法名()
public void com.moon.point.CoreService.e(..)
public * com.moon.point.CoreService.*(..)
* com.moon.*.*.*(..)
*/
//所有类型 所有返回值 com包下moon包下point包下CoreService的全部方法,方法的参数为任意
public * com.moon.point.CoreService.*(..)
//所有类型,所有返回值 com包下moon包下全部的包和类的全部方法,方法的参数为任意
* com.moon..*.*(..)
//所有类型,所有返回值 com包下moon包下全部的包和类的e方法,方法的参数为任意
* com.moon..*.e(..)
以上是关于Spring-AOP学习笔记-01 初识AOP的主要内容,如果未能解决你的问题,请参考以下文章