简介
1、什么叫做面向切面编程?
概念:把一个个的横切关注点(某种业务的实现代码)放到某个模块中去,称之为切面。每个切面影响业务的一种功能,切面的目的就是为了功能增强,将需要增强的方法做成切面,实现对业务的增强,就是面向切面编程。
目的:将与业务本身无关,却被业务模块所共同调用的功能代码封装成切面,以减少系统的重复代码,降低耦合,提高可扩展性。
优势:把多个方法前/后的共同代码抽离出来,使用动态代理机制来控制,先执行抽离出来的代码,再执行每一个真实方法.
2、Spring中的AOP使用动态代理来实现:
- 如果一个类实现了接口,那么spring就使用JDK的动态代理完成AOP;
- 如果一个类没有实现接口,那么spring就是用cglib完成AOP。
3、AOP的一些基本概念
- Joinpoint:连接点,被拦截到需要被增强的方法。去哪里做增强
- Pointcut:切入点,哪些包中的哪些类中的哪些方法,可认为是连接点的集合。去哪些地方做增强
- Advice:增强,当拦截到Joinpoint之后,在方法执行的什么时机(when)做什么样(what)的增强。
- Aspect:切面,Pointcut+Advice,去哪些地方+在什么时候+做什么增强
- Weaving:织入,把Advice加到Target上之后,创建出Proxy对象的过程。
切入点语法
1、execution(<访问修饰符>?<返回值类型><声明类型>?<方法名>(<参数名>)<异常名>)
?表示出现0次或1次
通配符:
* :匹配任何部分,只能表示一个单词
.. : 可用于全限定名中和方法参数中,分别表示子包和0到N个参数
2、实例介绍:
XML方式实现AOP
1、导入依赖
spring-aop spring-aspectj2、命名空间
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://mit() { System.out.println("提交事务++++++"); } @AfterThrowing(value="tt()",throwing = "ex") public void rollback() { System.out.println("回滚事务...."); } @After("tt()") public void destroy() { System.out.println("释放资源……………………"); } @Around("tt()") public Object around(ProceedingJoinPoint pjp){ Object obj=null; try { System.out.println("开启事务###"); obj=pjp.proceed(); System.out.println("提交事务++++++"); } catch (Throwable throwable) { throwable.printStackTrace(); System.out.println("回滚事务...."); }finally { System.out.println("释放资源……………………"); } return obj; }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。