Spring 学习笔记之IOC

来源:互联网 发布:网络诈骗多少钱才算 编辑:程序博客网 时间:2024/06/07 19:11

认识Spring

  • Spring是一个开源轻量级的框架
  • Spring核心的的俩部分
    • IOC:控制反转(平时我们要调用一个非静态的方法,是通过先去new一个对象,然后再通过对象去调用这个方法;但是通过IOC,我们就可以将对象的new操作就交给了Spring容器去管理,对象管理的权限交给了spring容器,这就是控制反转。
    • AOP:面向切面编程,在不修改源代码的基础上面,我们对项目功能的扩展,就叫面向切面编程。
  • Spring 是一个一站式框架(多层框架,在javaee三层结构中,每一层都提供不同的解决技术)
    • web层: SpringMvc
    • service层:Spring的ioc
    • dao层:spring的jdbcTemplate
    • 注:我的看法,虽说Spring的功能很强大,可以在每一层都可以提供解决技术,但我更喜欢专门的框架各司其职,更专业强大点!

细说Spring IOC

  • IOC的操作方式
    • IOC的配置文件方式
    • IOC的注解方式
  • IOC底层原理
    • xml配置文件
    • dom4j解决xml
    • 工厂设计模式
    • 反射
    • 注:我们通过写配置文件,然后通过dom4j解析xml文件,经过工厂模式,反射的方式,映射读取到xml所配置类的属性方法
  • Bean实现的3种方式
    • 通过类的无参构造方法来实现(注:如果类中不存在无参构造方法的话,会出现异常BeanCreationException)
    • 通过静态工厂的模式来创建
    • 通过实体工厂来创建
    • 注:在实际开发中,我们只采用第一种方式,通过类的无参构造方法来实现bean的创建
  • Bean的四种属性
    • id属性值:表示给class起得名称,无命名要求,建议是类名首字母小写,id属性值,不能包含特殊字符,在代码中根据id值得到配置对象
    • class属性值:创建对象所在类的全路径
    • name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性里面可以包含特殊符号(满足前期其它框架的的命名中有特殊符号的情况)
    • scope属性:bean的作用域
      • singleton:默认值,单例模式
      • prototype:多例
      • request:创建对象,把对象放到request域里面
      • session:创建对象,把对象放到session域里面
      • globalsession:创建对象,把对象放到globalsession域里面
  • 属性注入的方式
    • 使用set方法注入
    • 有参数构造注入
    • 使用接口注入
    • 注:在Spring框架里面,只支持set方法注入(重要,常用)和有参构造方法
    • p名称空间注入(特殊方式,不常用)在beans中加入xmlns:p,如下;再配置bean
    • 注入复杂的数据类型
      • 数组的注入(方式:
      • list的注入(方式:
      • map的注入(方式:
      • property的注入方式:
  • IOC和DI的区别
    • IOC: 控制反转,把对象创建的权利交给spring容器来处理配置
    • DI:依赖注入,向类里面的属性中设置值
    • 关系:依赖注入不能单独存在,需要在IOC的基础上完成操作
  • Spring整合web项目的原理
    • 加载spring的核心配置文件 ,我们测试的时候是通过new classPathXxlApplicationContext对象实现的,效率低下
    • 实现思想:最好在服务器启动的时候,就可以加载配置文件和创建对象
    • 实现原理:
      • 通过监听servletContext对象
      • 监听器
      • 具体步骤:
        • 服务器在启动的时候,会为每个项目创建一个servletContext对象
        • 在servletContext对象创建时,可以使用监听器监控到servletContext对象具体在什么时候创建
        • 在监听到servletContext对象创建的时候,加载Spring配置文件,创建对象
        • 把创建出来的对象存入servletContext域对象中(通过setAttribute方法存入)
        • 获取对象时,到servletContext域对象中拿对象(通过getAttribute方法拿到)


原创粉丝点击