Spring AOP和AspectJ
AOP :Aspect Oriented Programming,即面向切面编程
是一种编程思想,是OOP(面相对象编程)的一个补充,实现对一类功能的集中处理,而不是在每个需要处理的地方进行直接的方法调用,常用于实现一些业务无关的功能(如事务控制、日志记录、安全控制、数据统计、异常处理等)
Spring AOP:
依赖于Spring框架,基于代理实现的,只能用于bean。
在Spring启动时,使用动态代理,将切面逻辑织入到目标对象的方法调用中
只支持方法级别的连接点,只能拦截方法调用
提供Before、After、AfterReturning、AfterThrowing和Around等通知类型
通过Spring容器来管理和配置切面、切入点和通知,可以基于注解和XML配置的方法来进行配置
对于复杂的切面和大规模的应用,性能略低,因为是在运行时进行的动态代理
AspectJ AOP:
是一个独立的框架,不依赖于Spring,既可以在编译时、也可以在运行时进行切面逻辑的织入,并提供了更细粒度的切入点选择
需要使用特定的编译器(ajc),或者在运行时通过AspectJ的织入器来进行织入
支持更多的连接点,包括方法调用、方法执行、字段访问、异常处理等
提供Before、After、AfterReturning、AfterThrowing和Around等通知类型
支持引入(Introduction)和动态切面等功能
性能高效,可以在编译时进行织入,较少了运行时的开销