什么是AOP
AOP:面向切面编程,通过预编译方式和运行时期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的一种延续,是函数式编程的一种衍生范型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分之间的耦合度降低,提高程序的可重用的,同时提高了开发效率。
AOP在Spring中的作用
提供声明事务,允许用户自定义切面
图示
在pom文件中添加上支持的依赖
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
实现AOP的方式一:
使用Spring的原生api实现
public interface UserService {
void add();
void select();
}
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("增加一个");
}
@Override
public void select() {
System.out.println("查找一个");
}
}
实现MethodBeforeAdvice 接口和AfterReturningAdvice 底层代码
public class AfterLog implements AfterReturningAdvice {
//returnValue 返回值
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法的返回结果为:"+returnValue);
}
}
public class Log implements MethodBeforeAdvice {
//method :要执行的目标对象的方法
//args:参数
// target:目标
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println(target.getClass().getName()+"的"+ method.getName()+"执行了");
}
}
AOP约束
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
方式二 :自定义类
public class DiyPointCut {
public void before(){
System.out.println("执行之前");
}
public void after(){
System.out.println("执行之后");
}
}
在配置文件中 将该类作为切面,然后将切面对切入点进行环绕
方式三:使用注解
首先要导入注解支持
<aop:aspectj-autoproxy/>
//切面注解标志这是一个切面
@Aspect
public class AnnotationPointCut {
@Before("execution(* service.UserServiceImpl.*(..))")
public void before(){
System.out.println("执行之前");
}
}