Spring IoC&AOP
Spring IoC简介
Spring通过一个配置文件描述Bean与Bean间的依赖关系,利用Java的反射机制实例化Bean并建立Bean之间的依赖关系。Spring的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存管理,Bean生命周期管理、Bean实例代理、事件发布和资源装载等高级服务。
Spring Bean作用域
Spring为Bean定义了5种作用域,分别为Singleton/单例、Prototype/原型、Request/请求级别、Session/会话级别和Global Session/全局会话。
- Singleton
- Prototype
- Request
- Session
- Global Session
Spring Bean生命周期
(1) ~ (9)
Spring的4中依赖注入
- 构造器注入
- set方法注入
- 静态工厂注入
- 实例工厂注入
自动装配的5种方式
Spring的装配方式包括手动装配和自动装配。手动装配包括基于XML装配(构造器、set方法等)和基于注解2种方式。自动装配包括5种装配方式,这5种方式均可以用来引导Spring容器自动完成依赖注入,具体如下。
- no:关闭自动装配
- byName:根据参数名
- byType:通过参数类型
- constructor:通过设置构造器参数的方式
- autodetect:首先尝试使用constructor方式,如不成功,测使用byType方式
Spring AOP简介
Spring AOP通过面向切面技术将与业务无关却为业务模块所公用的逻辑代码封装起来,以抬高代码复用率,减低耦合度。
Spring AOP主要应用场景
序号 | 应用场景 | 说明 |
---|---|---|
1 | Authentication | 权限统一管理和授权 |
2 | Caching | 缓存统一维护 |
3 | Context Passing | 内容传递 |
4 | Error Handling | 系统统一错误处理 |
5 | Lazy Loading | 数据懒加载 |
6 | Debugging | 系统调试 |
7 | Logging | 系统日志记录与存储 |
8 | Performance Optimization | 性能优化 |
9 | Resource Pooling | 资源池统一管理和申请 |
10 | Synchronization | 操作同步 |
11 | Transactions | 统一事务管理 |
AOP的核心概念
- 横切关注点:定义对那些方法进行拦截,拦截后执行哪些操作
- 切面(Aspect):横切关注点的抽象
- 连接点(Joinpoint):在Spring中,连接点指拦截到的方法,广义上还可以是字段或构造器
- 切入点(Pointcut):对连接点进行拦截的定义
- 通知(Advice):拦截点连接点之后要执行的具体操作,通知分为前置通知、后置通知、成功通知、异常通知、和环绕通知5类
- 目标对象:代理的目标对象
- 织入(Weave):将切面应用到目标对象并执行代理对象创建的过程
- 引入(Introduction):在运行期间为类动态地添加一些方法或字段而不用修改类的代码
AOP的两种代理方式
Spring提供了JDK和CGLib两种方式来生成代理对象,具体生成代理对象的方式由AopProxyFactory更具AdvisedSupport对象的配置来决定。Spring默认的代理对象生成策略为:如果是目标类接口,则使用JDK动态代理技术,否则使用CGLib动态代理技术。
- JDK动态代理
- CGLib动态代理
CGLib动态代理和JDK动态代理的区别:JDK只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,则只能通过CGLib创建动态代理来实现
AOP的5种通知类型
序号 | 通知类型 | 描述 |
---|---|---|
1 | 前置通知 | 在一个方法执行之前执行通知 |
2 | 后置通知 | 在一个方法执行之后执行通知(无论方法执行成功与否都执行) |
3 | 成功通知 | 在一个方法执行成功之后执行通知(只有在方法执行成功时才执行通知) |
4 | 异常通知 | 当一个方法执行抛出异常退出时,才执行该通知 |
5 | 环绕通知 | 在拦截方法调用之前和之后,分别执行通知 |