1.什么是AOP?为什么产生?
与OOP(面向对象)相比,传统的OOP开发中的代码逻辑都是自上而下的过程中会产生横切性的问题。
而这些横切性的问题又与我们的主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护。
AOP(面向切面编程)的编程思想j就是把这些横切性的问题和主业务逻辑进行分离,从而得到解耦的目的。
2.AspectJ:
AspectJ是一个AOP框架,由于SpringAOP的配置过于繁琐,因此使用了AspectJ依赖注解开发.
2-1:引入依赖:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
2-2:写增强类:
package com.example.springaop.springaop;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* 增强类
*/
@Aspect // 用来声明这是一个AspectJ
@Component
public class ZhuAspect {
//在该无参无内容的方法上添加一个@Poincut()来声明切入点,在后来的@After,@Befor@Around("pc()")直接写入该方法的名字就能在自动使用这些切点
@Pointcut("execution(* com.example.springaop.service.*.*(..))")
public void pointcut(){
}
//后置增强
@After("execution(* com.example.springaop.service.*.*(..))")
public void After()
{
System.out.println("朱伯元");
}
//前置增强
@Before("com.example.springaop.springaop.ZhuAspect.pointcut()")
public void before()
{
System.out.println("活好人帅");
}
}
3.默认AspectJ使用的是什么代理:
默认使用的是jdk自带的动态代理
jdk自带的动态代理必须是接口,而cglib不需要实现接口