首先导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
目录结构:
接下来看代码:
service层AopTextService
package com.example.aoptext.service;
public interface AopTextService {
int add();
}
service层AopTextServiceImpl
package com.example.aoptext.service.impl;
import com.example.aoptext.service.AopTextService;
import org.springframework.stereotype.Service;
@Service
public class AopTestServiceImpl implements AopTextService {
@Override
public int add() {
System.out.println("进入方法了");
return 0;
}
}
切面类:
package com.example.aoptext.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class AopText {
@Before("execution(* com.example.aoptext.service.impl.AopTestServiceImpl.*(..))")
public void before(){
System.out.println("========方法执行前===========");
}
@After("execution(* com.example.aoptext.service.impl.AopTestServiceImpl.*(..))")
public void after(){
System.out.println("========方法执行后===========");
}
@Around("execution(* com.example.aoptext.service.impl.AopTestServiceImpl.*(..))")
public Object around(ProceedingJoinPoint pj) throws Throwable {
System.out.println("========环绕前===========");
Object proceed = pj.proceed();
System.out.println("方法结果为" + proceed);
System.out.println("========环绕后===========");
return proceed;
}
}
@Aspect 声明该类是切面类
@Before 是在方法执行前执行
@After 是在方法执行后执行
@Around 是环绕增强,一会看执行结果就明白如何循环切了,注意要有返回值即return,如果没有会报错,除非你切的方法是void类型。这就比如我和你说话,你不能光听到了你还得有回应,不然我会生气的.
测试类:
package com.example.aoptext;
import com.example.aoptext.service.AopTextService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class AoptextApplicationTests {
@Autowired
private AopTextService aopTextServiceImpl;
@Test
void contextLoads() {
aopTextServiceImpl.add();
}
}
执行结果: