AOP
面向切面编程
在Spring中,提供声明式事务,允许自定义切面
- 横切关注点:跨越app多个模块的方法或功能,与业务逻辑无关(日志、安全、缓存、事务等等)
- 切面:横切关注点被模块化的特殊对象,类
- 通知:切面必须完成的工作,类中的方法
- 日志:被通知的对象
- 代理:向目标对象应用通知之后创建的对象
- 切入点:切面通知执行的“地点”的定义
- 连接点:与切入点匹配的执行点
使用Spring 实现 AOP
导包
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9.1</version>
</dependency>
方式一:使用Spring的接口
SpringAPI接口实现
-
接口
public interface UserService{ public void add(); public void delete(); public void update(); public void query(); }
-
实现类
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 query() { System.out.println("查找商品"); } }
-
切入日志功能
import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; public class Log implements MethodBeforeAdvice { //method: 要执行的目标对象的方法 //object: 参数 //target: 目标对象 public void before(Method method, Object[] args, Object target) throws Throwable { System.