@EnableAspectJAutoProxy
用于开启spring对注解aop的支持
@Aspect
位置放到aspect类上面,表示这个是一个aspect
Pointcut
在aspect类里面添加一个函数,在函数上面添加该注解,用于配置一个切入点
具体pointcut表达式的编写可以参考spring aop|切入点pointcut表达式编写方案示例
@Before
@AfterReturning
@AfterThrowing
@After
@Around
aspect文件:用于增强
@Component
@Aspect
public class MyLogAspect {
@Pointcut("execution(* com..*.*(..))")
private void pointcut(){}
@Before("pointcut()")
public void logBefore(JoinPoint joinPoint) throws Throwable {
System.out.println("[logBefore]");
}
@AfterReturning("pointcut()")
public void logAfterReturn(JoinPoint joinPoint) throws Throwable {
System.out.println("[logAfterReturn]");
}
@AfterThrowing("pointcut()")
public void logAfterThrowException(JoinPoint joinPoint) throws Throwable {
System.out.println("[logAfterThrowException]");
}
@After("pointcut()")
public void logAfter(JoinPoint joinPoint) throws Throwable {
System.out.println("[logAfter]");
}
}
pojo文件:用于被增强
@Component
public class Student {
public void speak(){
System.out.println("i love Java!");
// throw new RuntimeException("123456");
}
}
配置类
@Configuration
@ComponentScan("com.kehao")
@EnableAspectJAutoProxy
public class ApplicationContext {
}
测试代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationContext.class})
public class StudentTest {
@Autowired
private Student student;
@Test
public void speak() {
student.speak();
}
}
详细代码:https://github.com/chenkehao1998/JavaExampleForBlog/tree/main/spring_aop_anno
原文:https://www.cnblogs.com/kehao/p/14670680.html