1.AOP的jar包依赖
<!--aop的jar包依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
2.beans.xml配置
(1)添加命名空间
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
(2)配置AOP代理
<aop:aspectj-autoproxy/>
beans.xml:
<?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:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 配置扫描器 扫描包的范围 不代表该范围下所有的bean都被实例化,需要借助注解配合使用-->
<context:component-scan base-package="com.shsxt"></context:component-scan>
<context:annotation-config />
<!--开启代理标识,在程序运行期,动态创建目标对象代理对象 -->
<aop:aspectj-autoproxy/>
</beans>
package com.yonyou.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* @author Administrator
*
*/
@Component
//切面注解
@Aspect
public class LogCut {
//切入点注解
@Pointcut("execution(* com.yonyou.service..*.*(..))")
public void cut(){}
//目标类方法执行前执行该方法
@Before(value="cut()")
public void before(){
System.out.println("目标类方法执行前执行该方法........");
}
@AfterReturning(value="cut()")
public void afterReturn(){
System.out.println("方法正常结束后执行该输出");
}
@After(value="cut()")
public void after(){
System.out.println("最终通知,方法无论是否发生异常,都会执行该输出");
}
@AfterThrowing(value="cut()", throwing="e")
public void afterThrow(Exception e){
System.out.println("如果方法执行发生异常,执行该输出"+e);
}
@Around(value="cut()")
public Object around(ProceedingJoinPoint pjp){
Object result=null;
System.out.println("环绕通知---前置通知");
try {
Object[] params=pjp.getArgs();//获取方法参数
if(null!=params||params.length>0){
for (Object object : params) {
System.out.println(object.toString());
}
}
System.out.println("方法签名:"+pjp.getSignature());//获取方法签名
System.out.println("目标类"+pjp.getTarget());//目标类
result=pjp.proceed();//执行目标对象的方法
System.out.println("环绕通知---后置通知");
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
System.out.println("环绕通知---最终通知");
}
return result;
}
}