一、IOC(Inversion of Control)
1.概念
IOC即控制反转,将设计好的对象交给容器控制,而不是在对象内部控制。
借助IOC容器,可以使各对象之间解耦。
2.实现方式
也叫做依赖注入(DI),共有三种方式:
- 接口注入
- Construct注入
- Setter注入
3.实现方法
其核心是在系统运行中,由IOC容器动态的向某个对象提供所需对象。实现依赖注入的方式是反射,其具体方法是:
- 定义用来描述Bean配置的Java类
- 解析Bean配置,Spring采用HashMap来存储BeanDefination对象
- 遍历取出配置信息,通过反射实例化对象,保存在另一个Map中
4.IOC的优势
- 降低类之间的耦合
- 倡导面向接口编程
- 提高系统可插入,可测试,可修改的特性
二、AOP(Aspect Oriented Programming)
AOP即面向切面编程,在程序某处切开,注入定义的接口(将一些公用行为封装成接口模块)。
1.原理
1.静态代理
若代理类在程序运行前就已经存在,那么这种代理方式被成为静态代理,这种情况下的代理类通常都是我们在Java代码中定义的。
2.动态代理
代理类在程序运行时创建的代理方式被成为动态代理。也就是说,这种情况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。
- JDK动态代理:通过反射接收被代理的类,被代理的类必须实现一个借口
- CGLIB动态代理:若没有实现接口,SpringAOP会用CGLIB动态生成子类
2.应用场景
权限、缓存、内容传递、错误处理、懒加载、调试、跟踪、优化、同步、事务
3.切点
1.连接点
程序执行的某个特定位置,Spring仅支持方法连接点,如方法的调用前、调用后。
2.切点
查询条件,根据切点查找对应的连接点,一个切点可以匹配多个连接点。
3.增强
织入到目标类连接点上的一段程序代码。
4.引介
可以为类添加一些属性和方法,即使一个类原来没有实现某些功能,通过引介可以动态的添加接口的逻辑,使其成为接口的实现类。
可以在编译器/运行时/装载期织入。
5.切面
由切点和增强组成。
文章评论