spring5-11
11、AOP
11.3 使用Spring实现AOP
【重点】使用AOP,需要导入一个依赖包!
org.aspectj
aspectjweaver
1.9.8
runtime
目录结构:
service包下的UserService接口:
package com.kuang.service;
public interface UserService {
public void add();
public void delete();
public void update();
public void select();
}
service包下的UserServiceImpl实现类:
package com.kuang.service;
public class UserServiceImpl implements UserService{
public void add() {
System.out.println("增加了一个用户");
}
public void delete() {
System.out.println("删除了一个用户");
}
public void update() {
System.out.println("修改了一个用户");
}
public void select() {
System.out.println("查询了一个用户");
}
}
log包下的Log类:
package com.kuang.log;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class Log implements MethodBeforeAdvice {
//method: 要执行的目标对象的方法
//args: 参数
//target: 目标对象
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");
}
}
log包下的AfterLog类:
package com.kuang.log;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
public class AfterLog implements AfterReturningAdvice {
//returnValue: 返回值
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法,返回结果为:"+returnValue);
}
}
diy包下的DitPointCut类:
package com.kuang.diy;
public class DiyPointCut {
public void before(){
System.out.println("===========================方法执行前=======================");
}
public void after(){
System.out.println("===========================方法执行后=======================");
}
}
方式一:使用Spring的API接口【主要SpringAPI接口实现】
对应的applicationContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
方式二:自定义来实现AOP【主要是切面定义】
对应的applicationContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>