Spring IOC和DI

来源:互联网 发布:c 相关系数算法 编辑:程序博客网 时间:2024/05/21 00:54

Spring  IOC和DI


  1. 框架: 
    将一些公用的模块进行集成,通过框架的形式进行管理(事务控制,权限控制(Shiro),日志收集log)
  2. Spring框架 
    SSH: Struts2(配置重型)+Spring(业务层)+Hibernate(orm)(500万数据变慢)中小型企业 
    SSM: SpringMVC+Spting(业务层框架)+Mybatis(持久层框架)
  3. Spring框架: 
    Spring框架是现在所有企业中都需要使用的框架,2大核心技术IOChe DI,AOP.Spring框架内部实现事务控制.只 要引用Spring的事务控制,从此程序员无需关注事务. 
    作用:Spring能够整合现阶段所有的主流框架,让程序调用浑然一体.方便管理.—粘合剂
  4. Spring的学习计划: 
    • SpringIOC和DI
    • 简化Spring配置
    • Spring的AOP
    • AOP的大量练习
    • Spring整合JDBC和声明式事务处理
  5. Spring的IOC 
    • IOC是控制反转
    • 对象的创建过程由Spring容器来管理,程序员从此无需关注对象的创建过程,Spring容器管理对象的声明周期. 
      • Person p1=new Person();—-程序员手动编写
      • Person p2=Spring容器.getXXX()方法:Spring容器创建
  6. Spring 入门案例 
    • 导入jar包
    • 创建实体类(javaBean)
    • 编辑配置文件(1.引入配置文件的头标签2.编辑配置类)
    • 启动Spring容器(内部创建对象)
    • 从Spring容器中获取对象

入门案例

1 定义实体类
2 编辑配置文件
  • 默认名称:applicationContext.xml 
    • 名称可以自定义:application-XXX.xml
  • 引入配置文件的头 
    - Schema:让指定标签生效 
    - DTD:Mybatis中配置文件使用
  • 引入方式: 
    • 直接拷贝
    • 通过自己手痛配置
3 Spring创建对象的原理:

问题:Spring如何创建对象,对象是如何存储的,用户是如何获取的对象? 
1. Spring容器启动时,首先会加载spring核心配置文件. 
2. Spring逐行进行解析xml配置文件 
3. 当解析bean标签时开始创建对象,根据class属性中的数据通过反射机制创建对象. 
4. 将创建好的对象存入Spring所维护的Map<key,value>中key 就是bean中的ID.value就是生成的对象 
5. 用户传入key,通过key来获取Mao中的value(对象) 
6. 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做的好.

扩展

  • 权限管理的粒度控制
  • 反射调用时必须添加无惨构造
  • 整理各种的内存管理机制
原创粉丝点击