- 编写切面实现
@Aspect @Component public class MyAnnotationAwareAspect { @Around("execution(* com.yicj.study.common.service.*.*(..))") public Object process(ProceedingJoinPoint point) throws Throwable { String clazzName = point.getTarget().getClass().getSimpleName(); String methodName = point.getSignature().getName(); log.info("hello BeanNameAutoProxyCreator ,i come,clazzName [{}] methodName [{}]",clazzName,methodName); log.info("调用方法前"); Object ret = point.proceed(); log.info("调用方法后"); return ret ; } }
- 要创建代理的目标类与接口
public interface UserService { void print(); } @Service("userService") public class UserServiceImpl implements UserService { public void print(){ log.info("hello busi"); } }
- 编写配置类(也可使用@EnableAspectJAutoProxy引入AnnotationAwareAspectJAutoProxyCreator)
@Configuration @ComponentScan("com.yicj.study.common.service") public class MyAppConfig { @Bean public AbstractAutoProxyCreator autoProxyCreator(){ AbstractAutoProxyCreator autoProxyCreator = new AnnotationAwareAspectJAutoProxyCreator(); autoProxyCreator.setProxyTargetClass(true); return autoProxyCreator ; } }
- 测试
@SpringBootApplication public class AspectJAwareAdvisorAutoProxyApp implements ApplicationRunner { @Autowired private UserService userService ; public static void main(String[] args) { SpringApplication.run(AspectJAwareAdvisorAutoProxyApp.class, args) ; } @Override public void run(ApplicationArguments args) throws Exception { userService.print(); } }
- 结果输出
c.y.s.a.MyAnnotationAwareAspect : hello BeanNameAutoProxyCreator ,i come,clazzName [UserServiceImpl] methodName [print] c.y.s.a.MyAnnotationAwareAspect : 调用方法前 c.y.s.c.service.impl.UserServiceImpl : hello busi c.y.s.a.MyAnnotationAwareAspect : 调用方法后
- 注意事项
使用@AspectJ形式得aop,需要将aspectjweaver.jar和aspectjrt.jar加入到classpath中
Aop之AnnotationAwareAspectJAutoProxyCreator学习笔记
最新推荐文章于 2024-08-05 22:37:08 发布
本文展示了如何在Spring Boot应用中通过@AspectJ注解创建切面,监控UserService类的方法调用。配置了AbstractAutoProxyCreator并启用AspectJ自动代理,实现了在方法调用前后插入自定义日志记录。
摘要由CSDN通过智能技术生成