Spring AOP的概念:AOP是面向切面编程的意思,其主要作用就是对代码块进行处理;其设计思想源自代理模式,在此基础上进行封装扩展,最终形成了aop框架;
面向切面编程的理解就是在不修改原有的代码的情况下,直接在业务流程中将新的代码切入;
面向切面编程的一些基本概念:
什么是切入点?
切入点就是可以插入增强处理的方法;
什么是增强处理类型?
增强处理类型就是在原有的对象之前插入的增强处理为前置增强,改方法正常执行以后插入的增强处理为后置增强;
使用Spring AOP的目的:面向切面编程,例如某个功能点,我们只需抽取横切关注点,然后让需要处理这些功能点的方法来使用代理的方式调用
AOP的组成:
1切面:横切关注点被模块化的对象---功能模块化组成的对象
2通知:就是切面需要完成的功能---就是功能的实现方法1、方法2...
3连接点:就是程序执行的某个特定位置,例如方法前方法后,也是通知所关心的位置
4目标:被通知的对象,也是连接点所在的对象
5代理(Proxy): 向目标对象应用通知之后创建的对象
AOP的使用:
1:抽取横切关注点:也就是抽取我们需要面向切面编程的功能,然后模块化对象
2:然后把模块化对象声明为切面
3:把模块对象细粒化,把功能细分为各个方法
4:声明通知和通知的连接点
使用案例:
使用Spring AOP进行输出日志:
package com.decolor.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* aop执行的类
* @author Admin
*
*/
public class ServiceLogging {
private Log log=LogFactory.getLog(this.getClass());
//aop执行的方法
public void beforservice(){
log.info("log方法已执行");
System.out.println("save方法被调用");
}
}
注意:配置文件中的execution是切入点指示符,括号中是一个切入点表达式,可以配置需要植入的增强方法,切入点表达式支持模糊匹配;以下是常用的匹配模式:
public * adduser(com.decolor.entiy.user):"*"表示匹配所有返回类型的返回值
public void *(com.decolor.entiy.user):"*"表示匹配所有的方法名
public void addUser(..);".."表示匹配所有参数个数和类型;
* com.decolor.service.*.*(..);匹配改包下的所有类和所有方法
* com.decolor.service..*();匹配改包及改包下的所有子包的所有类和所有方法;
AOP是用注解步骤:
一:在Spring的配置文件中引入注解的切面驱动器:<aop:aspectj-autoproxy/>
二:在aop执行的类上使用注解@Aspect,并且在aop执行的方法中定义切点和增强类型;
例:
@Before("execution(* com.decolor.biz.*.*(..))");//Before()是后置强类型,就是在所有方法执行完后在执行aop中的该方法;
public void save(){
"aop要执行的方法";
}
AOP增强类型的其他类型:
@Before:表示后置增强类型
@After:表示前置增强类型;