Spring的aop操作
2017-04-16 17:29
211 查看
还是再啰嗦一下,再讲一次。Aop面向切面的编程,在不修改原来代码的情况下给程序添加统一的功能。例如在进行每一个操作之后都需要做日志,这时就可以用aop
一:专业术语:
连接点:类中可以被增强的方法,这些方法称作连接点
切入点:我们当前拦截的方法,就需要增强的方法
通知:拦截到方法之后要做的事情
前置通知前置通知 before
后置通知 afterReturning
最终通知 after
环绕通知 around
异常通知 afterThrowing
切面:切入点+通知等于切面
我个人的总结是:
切入点:要针对哪些方法
通知:要做什么操作
切面 = 切入点 + 通知。针对哪些方法做操作
二:开发步骤:
第一步:导入包
![](https://img-blog.csdn.net/20170416203450968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3poZWdhYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第二步骤:创建spring核心配置文件,导入aop的约束
![](https://img-blog.csdn.net/20170416203721672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3poZWdhYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第三步:配置文件,具体如何配置看下面【配置文件的方式】
特别注意一点:这里要给大家讲一下execution表达式,通过写execution表达式拦截配置切入点,所以要先学习一下
以上配置就可以了.结果如下,结果的每个人自己测试一下就可以了
四:基于aspectj的注解aop【注解的方式】
第一步 创建对象,并且开启aop操作
第二步 在增强类上面使用注解完成aop操作
一:专业术语:
连接点:类中可以被增强的方法,这些方法称作连接点
切入点:我们当前拦截的方法,就需要增强的方法
通知:拦截到方法之后要做的事情
前置通知前置通知 before
后置通知 afterReturning
最终通知 after
环绕通知 around
异常通知 afterThrowing
切面:切入点+通知等于切面
我个人的总结是:
切入点:要针对哪些方法
通知:要做什么操作
切面 = 切入点 + 通知。针对哪些方法做操作
二:开发步骤:
第一步:导入包
第二步骤:创建spring核心配置文件,导入aop的约束
<?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"> </beans>
第三步:配置文件,具体如何配置看下面【配置文件的方式】
特别注意一点:这里要给大家讲一下execution表达式,通过写execution表达式拦截配置切入点,所以要先学习一下
//表达式格式 execution(<访问修饰词>? <返回值类型> <方法名>(<参数>?)<异常>) //?也就是访问修饰词0或者1个。可不写。下面举例 (1)execution(* cn.itcast.aop.Book.add(..)) (2)execution(* cn.itcast.aop.Book.*(..)) (3)execution(* *.*(..)) (4) 匹配所有save开头的方法 execution(* save*(..))
<!-- 1 配置对象 --> <bean id="book" class="cn.itcast.aop.Book"></bean> <bean id="myBook" class="cn.itcast.aop.MyBook"></bean> <!-- 2 配置aop操作 --> <aop:config> <!-- 2.1 配置切入点,拦截Book类下面所有的方法--> <aop:pointcut expression="execution(* cn.itcast.aop.Book.*(..))" id="pointcut1"/> <!-- 2.2 配置切面 把增强用到方法上面 --> <aop:aspect ref="myBook"> <!-- 配置增强类型 method: 增强类里面使用哪个方法作为前置 --> <aop:before method="before1" pointcut-ref="pointcut1"/> <aop:after method="after" pointcut-ref="pointcut1"/> <aop:after-returning method="after1" pointcut-ref="pointcut1"/> <aop:afterThrowing method="afterThrowing" pointcut-ref="pointcut1"/> <aop:around method="around1" pointcut-ref="pointcut1"/> </aop:aspect> </aop:config> //配置项是固定的。主要是第二步配置
以上配置就可以了.结果如下,结果的每个人自己测试一下就可以了
前置通知 before 后置通知 afterReturning 异常通知 afterThrowing 最终通知 after 环绕通知(前、后) ProceedingJoinPoint 以上所有通知都配置上时,执行结果如下: 1,不抛异常: == before == == 环绕通知(前) == >> 删除一个User << == after == == afterReturning == == 环绕通知(后) == 2,抛异常 == before == == 环绕通知(前) == >> 查询所有User << == after == == afterThrows ==
四:基于aspectj的注解aop【注解的方式】
第一步 创建对象,并且开启aop操作
<?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"> <!-- 2 开启aop操作 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> <!-- 1 配置对象 --> <bean id="book" class="cn.itcast.aop.Book"></bean> <bean id="myBook" class="cn.itcast.aop.MyBook"></bean> </beans>
第二步 在增强类上面使用注解完成aop操作
<!--首先声明这是一个切面--> @Aspect public class MyBook { //设置切点 //在方法上面使用注解完成增强配置 @Before(value="execution(* cn.itcast.aop.Book.*(..))") public void before1() { //这是通知 System.out.println("before.............."); } }
相关文章推荐
- 使用Spring AOP与Annotation所需的jar包以及命名空间操作
- xml方式---spring的AOP拦截用户操作
- Spring的AOP实现日志管理操作
- spring中AOP一些常用操作术语
- Spring的AOP:参数操作
- spring AOP的 操作日志记录功能
- springMVC +Mybatis +spring aop 实现用户系统操作日志记录
- SpringAOP注解方式记录操作日志(操作模块,操作功能,调用方法,主键信息等)支持多笔操作时记录
- Spring AOP 实现系统操作日志记录
- Spring中AOP操作的相关术语
- spring的AOP实现记录操作日志
- 使用Spring AOP使用注解记录用户操作日志
- Spring aop切面做日志处理操作
- 基于Spring的AOP实现自定义annotation操作日志
- spring aop 实现用户操作日志记录功能
- 注解方式---spring的AOP拦截用户操作
- java ssh spring aop 切面编程 操作日志
- 160309、Spring AOP操作action时无法注入,报空指针错误
- Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源
- spring AOP操作