赞
踩
@Component
public class ProductService {
public void doSomeService(){
System.out.println("doSomeService");
}
}
@Aspect
@Component
public class LoggerAspect {
//@Pointcut(value = "execution(* com.example.demo.aop.ProductService.*(..))")
//public void annotationPointCut(){};
@Around(value = "execution(* com.example.demo.aop.ProductService.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("start log:" + joinPoint.getSignature().getName());
Object object = joinPoint.proceed();
System.out.println("end log:" + joinPoint.getSignature().getName());
return object;
}
}
@Around表明这是一个切面,可以使用@pointCut的方式定义切点,当然也可以直接将切点定义在具体的建言(@Around)——也就是具体的切点执行内容中。
更多的建言还有@Before、@After、@AfterThrowing、@AfterReturning。
@ComponentScan("com.example.demo.aop")
@Configuration
@EnableAspectJAutoProxy
public class AopConfig {
}
使用@EnableAspectJAutoProxy注解开启Spring对AspectJ的支持,这个是必须的。网络上很多人说并不一定需要这个,springboot默认已经开启,但我多次尝试后,确定没有它切面压根不会执行。
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
ProductService productService = context.getBean(ProductService.class);
productService.doSomeService();
context.close();
}
}
完成以上动作后,就可以编码测试了,如图,前后都执行了切点方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。