Spring是什么
Spring是什么
Spring 是一个开源的轻量级 JavaSE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架(简化开发)
主要特点:
-
轻量级
0配置,API使用简单
-
面向bean
BOP,Bean在 Spring中才是真正的主角。
Spring 提供了IOC(控制反转)容器(用来存放bean以及bean之间的关系)通过配置文件或者注解的方式来管理对象之间的依赖关系。
-
松耦合
充分利用AOP编程思想。
对横切关注点或横切典型的职责(例如日志和事务管理)进行模块化。
-
万能胶
与主流框架无缝集成
-
设计模式
将java经典的设计模式运用的淋漓尽致
什么是 IOC/DI?
-
IOC(InversionofControl)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依 赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知 道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。
-
DI(DependencyInjection)依赖注入:就是指对象是被动接受依赖类而不是自己主动去找,换句话说就 是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它。
IOC 容器的初始化
BeanDefinition 的 Resource 定位、载入和注册这三个基本的过程
-
定位资源(定位查找配置文件)
-
加载(已经找到配置文件)
-
注册(已经记载好配置文件解析出来,并封装成BeanDefintion)对bean的说明而已,bean还没有真正的产出(把所有的class找出来存在)
DI/DL依赖注入
当 Spring IOC 容器完成了 Bean 定义资源的定位、载入和解析注册以后,IOC 容器中已经管理类 Bean 定义的相关数据,但是此时 IOC 容器还没有对所管理的 Bean 进行依赖注入,依赖注入在以下两种情况发生:
-
用户第一次通过 getBean 方法向 IOC 容索要 Bean 时,IOC 容器触发依赖注入。
-
当用户在 Bean 定义资源中为<Bean>元素配置了 lazy-init 属性,即让容器在解析注册 Bean 定义时 进行预实例化,触发依赖注入。
-
获取BeanDefintion信息
-
调用Factory的createBean()方法
依赖注入实现在以下两个方法中
-
createBeanInstance:生成 Bean 所包含的 java 对象实例(根据情况可能用JDK代理、cglib依赖关系)
-
populateBean :对Bean属性的依赖注入进行处理,做类型转换
真正的IOC容器,factoryBeanObjectCache
最核心的2个包
Spring-bean.jar 定义的是规范
Spring-context 工厂的实现,DI的实现
core是最顶层的,所有的项目都要依赖
Spring-aop是Spring-aspects的上层建筑(切面)
Spring 思想:
AOP
|
1、Aspect Oriented Programming
2、找出多个类中有一定规律的代码,开发时拆开,运行时再合并。
3、面向切面编程,即面向规则编程。
|
解耦,专人做专事
|
OOP
|
1、Object Oriented Programming
2、归纳总结生活中一切事物。
|
封装、继承、多态
|
BOP
|
1、Bean Oriented Programming
2、面向 Bean(普通的 java 类)设计程序。
|
一切从 Bean 开始
|
IOC
|
1、Inversion of Control
2、将 new 对象的动作交给 Spring 管理,并由 Spring 保存已创建 的对象。
|
转交控制权
|
DI/DL
|
1、Dependency Injection/Dependency Lookup
2、依赖注入、依赖查找,Spring 不仅保存自己创建的对象,而且保存对象与对象之间的关系。
3、注入即赋值,主要三种方式构造方法、set 方法、直接赋值。
|
先理清关系再赋值
|
代理模式
Proxy
|
1、两个参与角色:执行者、被代理人。
2、对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理。
3、需要获取到被代理的人个人资料。
|
办事要求人
|
工厂模式
Factory
|
1、对调用者隐藏复杂的逻辑处理过程,调用者只关心执行结果。
2、工厂要对结果负责,保证生产出符合规范的产品。
|
只对结果负责,不要 三无产品。
|
单例模式
|
1、保证从系统启动到系统终止,全过程只会产生一个实例。
2、当我们在应用中遇到功能性冲突的时候,需要使用单例模式。
|
保证独一无二
|
委派模式
|
1、两个参与角色,委托人和被委托人。
2、委托人和被委托人在权利上完全平等(即实现同一个接口)
3、委托人持有被委托人的引用。
4、不关心过程,只关心结果。
|
干活是你的(普通员 工),
功劳是我的(项目经 理)。
|
策略模式
|
1、执行最终结果一样。
2、执行过程和执行逻辑不一样。
|
我行我素,只看结果。
|
原型模式
|
1、首先有一个原型。
2、数据内容相同,但对象实例不同(完全两个不同的内存地址)。
|
拔一根猴毛,吹出千 万个。
|
模板模式
|
1、执行流程固定,但中间有些步骤有细微差别。
|
流程标准化,原料自 己加
|