Spring 是什么
- 轻量级开源框架,是一个容器框架,用来装javabean(java对象),中间层框架
- 轻量级控制反转IOC与面向切面AOP的容器框架
- 从大小与开销方面Spring都是轻量级
- 通过控制反转IoC技术来达到松耦合的目的
- 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性开发
- 包含并配置管理应用对象(Bean)的配置与生命周期,这个意义上是一个容器
- 将简单的组件配置组合,这个意义上是一个框架
谈谈对AOP的理解
系统是由许多不同的组件组成的,每一个组件各负责一块特定功能,除了实现自身核心功能之外,这些组件还经常承担着额外的职责,例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务经常成为横切关注点,因为它们会跨越系统的多个组件
当我们要为分散的对象引入公共行为时候,OOP(面向对象设计)显得无能为力,因而采用AOP
AOP将程序中的交叉业务逻辑(比如安全、日志、事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑中),AOP可以对某个对象或者某些对象功能进行增强,可以在执行某个方法之前或之后额外做事情
谈谈对IOC的理解
容器概念、控制反转、依赖注入
SpringIOC实现采用简单工厂+反射实现
容器概念
IOC容器:实质上是一个Map(key,value),里面存的是各种对象(在xml配置的bean节点,@repository、@service,@Controller、@component),在项目启动时候会读取配置文件里面的bean节点,根据全限定类名使用反射创建对象放到map里,扫面到上述注解的类时通过反射创建对象到map里
此时map里就有各种对象了,接下来在代码里需要用到里面的对象时,通过DI注入(autowired,resource等注解,xml里bean字节内的ref属性,项目启动的时候会读取xml节点ref属性根据id注入,也会扫描这些注解,根据类型或者id注入,id就是对象名)
控制反转
没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B,无论是创建或者使用对象B,控制权都在自己手上
引入IOC容器之后,对象A与对象B之间失去了直接联系,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方
通过前后对比:对象A获得依赖对象B的过程,由主动行为变成了被动行为,控制权颠倒,也是控制反转的由来
全部对象的控制权全部上交给IOC容器,IOC容器将对象之间粘合在一起发挥作用,没有IOC容器则对象之间就会失去彼此的联系
依赖注入
控制被反转后,获得依赖对象的过程由自身管理变味了由IOC容器主动注入,依赖注入DI是实现IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象种
Tips:IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的