最近学习了一下aop的使用,aop在项目开发中是必备的技能,不管是面试还是日常工作都需要用到,学习一下还是很有必要的。
话不多说,直接上代码
切面类LogAspect
@Aspect
@Component
public class LogAspect {
// @Pointcut("@annotation(com.company.demo.annotation.LogAnnotation)")
@Pointcut("execution(public * com.company.demo.service.LogService.testService())")
public void logMethod() {
}
;
@Around("logMethod()")
public Object logArround(ProceedingJoinPoint pjp) {
Object proceed = null;
try {
System.out.println("环绕开始");
proceed = pjp.proceed();
System.out.println("环绕结束");
} catch (Throwable e) {
e.printStackTrace();
}
return proceed;
}
}
被切的类LogService
@Service
public class LogService {
@LogAnnotation("haha")
public void testService(){
System.out.println("hello world!");
}
}
这里用两种方法进入切面,注解和execution
注解LogAnnotation代码
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {
String value() default "";
}
这里贴下execution表达式解析
execution(modifiers-pattern? ret-type-pattern
declaring-type-pattern?name-pattern(param-pattern)
throws-pattern?)execution(方法修饰符(可选) 返回类型 类路径 方法名 参数 异常模式(可选))
测试代码
@SpringBootTest
@RunWith(SpringRunner.class)
public class Test01 {
@Autowired
LogService logService;
@Test
public void test02(){
logService.testService();
}
结果
环绕开始
hello world!
环绕结束
ok! aop的简单使用就是这么多。