Spring IOC和DI
Spring IOC和DI
- 框架:
将一些公用的模块进行集成,通过框架的形式进行管理(事务控制,权限控制(Shiro),日志收集log)- Spring框架
SSH: Struts2(配置重型)+Spring(业务层)+Hibernate(orm)(500万数据变慢)中小型企业
SSM: SpringMVC+Spting(业务层框架)+Mybatis(持久层框架)- Spring框架:
Spring框架是现在所有企业中都需要使用的框架,2大核心技术IOChe DI,AOP.Spring框架内部实现事务控制.只 要引用Spring的事务控制,从此程序员无需关注事务.
作用:Spring能够整合现阶段所有的主流框架,让程序调用浑然一体.方便管理.—粘合剂- Spring的学习计划:
* **SpringIOC和DI**
* 简化Spring配置
* **Spring的AOP**
* AOP的大量练习
* Spring整合JDBC和声明式事务处理
- Spring的IOC
* IOC是控制反转
* 对象的创建过程由Spring容器来管理,程序员从此无需关注对象的创建过程,Spring容器管理对象的声明周期.
* Person p1=new Person();—-程序员手动编写
* Person p2=Spring容器.getXXX()方法:Spring容器创建
- Spring 入门案例
* 导入jar包
* 创建实体类(javaBean)
* **编辑配置文件(1.引入配置文件的头标签2.编辑配置类)**
* 启动Spring容器(内部创建对象)
* 从Spring容器中获取对象
入门案例
1 定义实体类
2 编辑配置文件
- 默认名称:applicationContext.xml
* 名称可以自定义:application-XXX.xml
- 引入配置文件的头
- Schema:让指定标签生效
- DTD:Mybatis中配置文件使用- 引入方式:
* 直接拷贝
* 通过自己手痛配置
3 Spring创建对象的原理:
问题:Spring如何创建对象,对象是如何存储的,用户是如何获取的对象?
- Spring容器启动时,首先会加载spring核心配置文件.
- Spring逐行进行解析xml配置文件
- 当解析bean标签时开始创建对象,根据class属性中的数据通过反射机制创建对象.
- 将创建好的对象存入Spring所维护的Map
中key 就是bean中的ID.value就是生成的对象 - 用户传入key,通过key来获取Mao中的value(对象)
- Spring容器中的对象的声明周期在默认情况下,同生共死
4 Spring容器获取对象的方式:
1.通过ID获取对象
2.通过class获取对象
5 头文件的引入
- 拷贝
- 自动生成
* 引入约束文件
* 添加约束文件
* 自动生成约束文件
* 通过模板自动引入
6 Spring创建对象的方式:
- 通过构造方法创建对象
* 通过反射
* 说明:通过默认的无参构造方式创建对象是Spring中默认的方式,这样的方式用的最多,所以,以后在编辑构造方法时.一定要添加无惨构造.
- 静态工厂创建对象
* 实质:方法调用需要通过**类名.方法**
* **为什么需要工厂模式:**有些对象不能够通过反射直接创建,抽象类和接口等
- 实例工厂
* 说明:实例化工厂本身需要创建对象
* 实质:方法的调用需要通过**对象.方法**
- Spring工厂
7 对象的单例和多例
说明:
- Spring创建的对象默认的条件下是单利的对象.
- 可以通过scope高边对象的单例和多例
分析:- 单例和多例的具体划分
* Servlet/Service/Dao/层级代码
* 购物车:要求每人一份的需要设置为多例对象
* javabean无需关注单利和多例,java安全机制默认设置
**扩展**
- 多例对象如何存储???
8 对象的懒加载机制
- 什么时候使用对象,什么时候创建对象
DI 依赖注入
为属性赋值
1.set方法注入
- 前提条件,为属性赋值是必须添加set方法,否则不能正确注入
2.构造方法注入
构造注入
- 注意:构造方法中的参数必须和配置文件中引入的参数一致
* 说明: 由于java中不会维护形参的名称,所以使用属性进行注入时,可能会有风险,所以以后一律使用index下标注值.
注入方式的分析:
- 如果程序员自己写代码,set注入居多,如果是软件架构使用构造注入居多.
Spring中IOC和DI的意义
- 无论之前是new对象和通过工厂模式实现.
- Spring的IOC和DI一起连用时,可以为对象进行动态的赋值,如果将来具体的实现类法身了改变,只需要修改配置文件中的class属性即可,java代码不需要做任何修改.最终实现松耦合!!!
- 迄今为止,松耦合问题上没有人比Spring做的好.
扩展
- 权限管理的粒度控制
- 反射调用时必须添加无惨构造
- 整理各种的内存管理机制
还没有评论,来说两句吧...