Spring整理——基础概念(IOC和DI)

Spring概念

  1. spring是开源的轻量级框架
  2. spring核心主要两部分:
    (1)aop:面向切面编程,扩展功能不是修改源代码实现
    比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,需要创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象,将这个过程交给spring
    (2)ioc:控制反转,
    把对象的创建不是通过new方式实现,而是交给spring配置创建类对象
  3. spring是一站式框架

Spring的ioc操作

  1. 把对象的创建交给spring进行管理
  2. ioc操作两部分:
    (1)ioc的配置文件方式
    (2)ioc的注解方式

IOC底层原理

1 ioc底层原理使用技术
(1)xml配置文件
(2)dom4j解决xml
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
(3)工厂设计模式
(4)反射

2 画图分析ioc实现原理
下面的图片是利用工厂设计模式实现
这里写图片描述
以上是bean的一个底层实现,spring就像一个大工厂,管理着所有的bean
详细请见
spring创建bean的底层实现

简单的IOC例子

第一步 创建类,在类里面创建方法
这里写图片描述
第二步 创建spring配置文件,配置创建类

  • spring核心配置文件名称和位置不是固定的,建议放到src下面,官方建议applicationContext.xml
  • 引入schema约束
    这里写图片描述
  • 配置对象创建
    这里写图片描述

第三步 写代码测试对象创建
这里写图片描述

Bean实例化的方式

  • 使用类的无参数构造创建(重点)(spring默认使用无参构造)
    这里写图片描述
    这里写图片描述
  • 使用静态工厂创建
    这里写图片描述
    这里写图片描述

  • 使用实例工厂创建
    这里写图片描述
    这里写图片描述
    其实就是将工厂类也作为bean来管理

Bean标签常用属性

(1)id属性:起名称,id属性值名称任意命名

  • id属性值,不能包含特殊符号
  • 根据id值得到配置对象

(2)class属性:创建对象所在类的全路径
(3)name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号
(4)scope属性

  • singleton:默认值,单例 对象只会创建一次
    这里写图片描述
  • prototype:多例 每次创建都是新的对象
    这里写图片描述

  • request:创建对象把对象放到request域里面

  • session:创建对象把对象放到session域里面
  • globalSession:创建对象把对象放到globalSession里面

属性注入介绍

1 创建对象时候,向类里面属性里面设置值
2 属性注入的方式介绍

  • 使用set方法注入
  • 使用有参数构造注入
  • 使用接口注入
    这里写图片描述

3 spring中支持前两种方法

  • 使用有参数构造注入属性
    这里写图片描述
  • 使用set方法注入属性(重点)
    这里写图片描述
  • 注入对象类型属性(重点)

    (1)过程: 创建service类和dao类,在service得到dao对象
    (2)具体实现过程:在service里面把dao作为类型属性,生成dao类型属性的set方法
    这里写图片描述

  • 注入复杂类型属性
<!-- 注入复杂类型属性值 -->
    <bean id="person" class="cn.itcast.property.Person">
        <!-- 数组 -->
        <property name="arrs">
            <list>
                <value>小王</value>
                <value>小马</value>
                <value>小宋</value>
            </list>
        </property>

        <!-- list -->
        <property name="list">
            <list>
                <value>小奥</value>
                <value>小金</value>
                <value>小普</value>
            </list>         
        </property>

        <!-- map -->
        <property name="map">
            <map>
                <entry key="aa" value="lucy"></entry>
                <entry key="bb" value="mary"></entry>
                <entry key="cc" value="tom"></entry>
            </map>
        </property>

        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverclass">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>

IOC和DI区别

(1)IOC: 控制反转,把对象创建交给spring进行配置
(2)DI: 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础之上完成操作

关于servletcontext和applicationcontext的区别
简单地说,servletcontext是对于每个javeweb的,
而applicationcontext是spring的

猜你喜欢

转载自blog.csdn.net/weixin_38719347/article/details/81040512