Spring源码2-SpringAOP解析

前言

SpringAOP面向切面编程是通过预编译方式和运行其动态代理,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,是OOP面向对象编程的有效补充。利用AOP技术将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不会影响业务逻辑的代码,实现了解耦,提高了代码的灵活性和可扩展性。

一句话:AOP: aspect oriented programming 面向切面编程,针对同一类问题的统一处理方式。

 

SpringAOP简单切面实用

举个简单实例:

需求:用户登录系统调用接口,记录访问次数(暂不考虑是否同一个人问题),最终注解方式
 
1、定义一个统计访问注解,注意:我这里是通过接口注解方式调用我们的切面接口
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserStatisticsAnnotation {
}
2、业务功能上添加注解
@Override
@UserStatisticsAnnotation
public List<UserVO> queryUserList(List<String> userIds) {
  return userServiceDao.queryUserList(userIds);
}
3、设计切面统计功能
/**
* AOP切面配置类
*/
@Slf4j
@Configuration
@Aspect
public class AOPConfig {
 
@Pointcut(value = "@annotation(com.example.demo.annotation.UserStatisticsAnnotation)")
public void pointCut() {
}
 
@Before("pointCut()")
public void before() {
  log.info("当前系统功能访问量加1》》"); // 这里就可以实现自己的业务逻辑功能
}
}
 
4、以上3步,基本上就定义好了切面内容以及什么时候使用,那么接下来就是交个Spring容器管理启用切面注解
@SpringBootApplication
@MapperScan("com.example.demo.dao")
@EnableAspectJAutoProxy
public class DemoApplication {
public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
}
}

 

SpringAOP源码解析
主要依据@EnableAspectJAutoProxy注解,相关源码解析参考如下博文:
 
 
 
posted @ 2022-05-28 13:11  chch213  阅读(26)  评论(0编辑  收藏  举报