8 -- 深入使用Spring -- 4...4 Spring 的 AOP 支持
8.4.4 Spring 的AOP 支持
Spring中的AOP代理由Spring的IoC容器负责生成、管理,器依赖关系也由IoC容器负责管理。因此,AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IoC容器的依赖注入提供。Spring默认使用Java代理来创建AOP代理,这样就可以为任何接口实现创建代理了。
Spring也可以使用cglib代理,在需要代理类而不是代理接口的时候,Spring会自动切换为使用cglib代理。但Spring推荐使用面向接口编程,因此业务对象通常都会实现一个或多个接口,因此默认将使用JDK动态代理,但也可强制使用cglib代理。
Spring AOP 使用纯Java 实现。它不需要特定的编译工具,Spring AOP也不需要控制类装载器层次,因此它可以在所有的Java Web 容器或应用服务器中运行良好。
Spring 目前仅支持将方法调用作为连接点(Joinpoint),如果需要把对成员变量的访问和更新也作为增强处理的连接点,则可以考虑使用AspectJ(编译时增强)。
Spring 2.0 可以无缝地整合 Spring AOP、IoC和AspectJ,使用所有的AOP应用完全融入基于Spring的框架中,这样的集成不会影响Spring AOP API 或者 AOP Alliance API ,Spring AOP保持了向下兼容性,依然允许直接使用Spring AOP API 来完成AOP编程。
纵观AOP编程,其中需要程序员参与的只有三个部分:
⊙ 定义普通业务组件。
⊙ 定义切入点,一个切入点可能和横切多个业务组件。
⊙ 定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作。
进行AOP编程的关键就是定义切入点和定义增强处理:一旦定义了合适的切入点和增强处理,AOP框架将会自动生成AOP代理。AOP代理的方法 = 增强处理 + 目标对象的方法。
通常建议使用AspectJ 方式来定义切入点和增强处理。Spring有如下两种:
⊙ 基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解来标注切入点和增强处理。
⊙ 基于XML 配置文件的管理方式: 使用Spring配置文件来定义切入点和增强处理。
相关文章
- Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
- [Spring学习笔记 3 ] spring 注解详解,完全注解,常用注解
- Spring -- AOP
- spring 学习3-Spring AOP
- Spring异常解决 java.lang.NullPointerException,配置spring管理hibernate时出错
- spring boot:多个filter/多个interceptor/多个aop时设置调用的先后顺序(spring boot 2.3.1)
- spring aop切点表达式常见写法
- spring aop JointPoint类
- spring aop抽取切点表达式
- Spring AOP编程-传统基于aspectJ切点AOP开发
- Spring AOP编程-aspectJ介绍
- Spring AOP编程-aspectJ代理方式选择
- Spring读源码系列之AOP--03---aop底层基础类学习
- 不一样的视角来学习Spring源码之AOP---上
- Spring繁华的AOP王国---第二讲
- Spring复杂的BeanFactory继承体系该如何理解? ----中
- Spring读源码系列之AOP--09---aop源码流程一把拿下
- Spring AOP——Spring 中面向切面编程
- spring aop 中@annotation()和自定义注解的使用
- spring源码阅读--aop实现原理分析
- 学习Spring Boot:(十四)spring-shiro的密码加密
- websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用
- 从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍
- 005-spring cache-原理、缓存AOP机制、Spring Cache抽象集成机制、springboot自动配置机制
- 017-Spring Boot AOP
- spring+ehcache实战--性能优化之道
- spring-boot-starter-aop及其使用场景说明
- 【java】Spring Boot --spring boot项目整合xxl-job
- 生命周期,探秘Spring容器的SmartLifecycle接口