上篇文章已经介绍了Spring实现动态代理的两种方式,是JDK动态代理和CGLib,了解一些底层的原理之后,现在来实现Spring AOP。
demo结构
1、建立maven项目,配置pom.xml
pom.xml文件中加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
** 2、定义接口类**
public interface HelloService {
void printHello();
}
3、实现接口
@Service
public class HelloServiceImpl implements HelloService {
@Override
public void printHello() {
System.out.println("hello");
}
}
4、定义切面
@Aspect
public class HelloAspect {
@Before("execution(* com.example.demo_aop.Service.HelloServiceImpl.printHello(..))")
public void before(){
System.out.println("before------");
}
@After("execution(* com.example.demo_aop.Service.HelloServiceImpl.printHello(..))")
public void after(){
System.out.println("after------");
}
@AfterReturning("execution(* com.example.demo_aop.Service.HelloServiceImpl.printHello(..))")
public void afterReturning(){
System.out.println("afterReturning------");
}
@AfterThrowing("execution(* com.example.demo_aop.Service.HelloServiceImpl.printHello(..))")
public void afterThrowing(){
System.out.println("afterThrowing------");
}
}
5、切点
@Configuration
@EnableAspectJAutoProxy
@ComponentScan("com.example.demo_aop.aop")
public class AopConfig {
@Bean
public HelloAspect getHelloAspct(){
return new HelloAspect();
}
}
6、测试
@SpringBootTest
public class HelloServiceTest {
@Autowired
private HelloService helloService;
@Test
public void printHello() {
helloService.printHello();
}
}
7、运行结果