Spring-IOC

Spring的IOC配置

什么是IOC?

  • IOC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源

Bean

  • 名称:bean

  • 类型:标签

  • 归属:beans标签

  • 作用:定义spring中的资源,受此标签定义的资源将受到spring控制(就是把被定义的资源放入容器中)

  • 格式:

    • <beans 
      	<bean>
      		...
          </bean>
      </beans>
      
  • 基本属性:

    • 	<!--bean的name可以定义多个-->
      <bean id="beanId" name="beanName1,beanName2" class="ClassName"></bean>
      
      • id:bean的名称,通过id值获取bean
      • class:bean的类型
      • name:bean的名称,可以通过name值获取bean,用于多人配合时给bean取别名

bean属性scope

  • 名称:scope

  • 类型:属性

  • 归属:bean标签

  • 作用:定义bean的作用范围

  • 格式:

    • 	<!--scope用于控制创建的对象是否是单例,默认为单例-->
      <bean scope="singleton"></bean>
      <bean scope="prototype"></bean>
      
  • 取值:

    • singleton:创建的对象是单例的,也就是说创建的对象是同一个对象
    • prototype:创建的对象是非单例的,创建的对象都是不同的对象
  • 创建时机

    • singleton:加载spring容器时创建
    • prototype:获取对象时(getBean)创建,获取一次就创建一次
  • 模式区别:

    • singleton:饿汉模式(不管你用不用,加载的时候就先给你)

    • prototype:懒汉模式(你要的时候我才给你)

Bean的生命周期控制

  • 名称:init-method,destroy-method

  • 类型:属性

  • 归属:bean标签

  • 作用:定义bean对象在初始化或销毁时完成的工作

  • 格式:

    • <bean init-method="init" destroy-method="destroy"></bean>
      
  • 取值:bean对应的类中对应的具体方法名

  • 当spring配置的是非单例的时候,就不归spring管理,spring只负责创建对象,关闭容器跟spring没有关联

依赖注入

  • IOC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源

  • DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring提供,资源进入应用程序的方式称为注入

在这里插入图片描述

  • IOC与DI的关系

    • IOC与DI是同一件事站在不同的角度看待问题

依赖注入的方式

  • set注入
  • 构造器注入
set注入(主流)
  • 名称:property

  • 类型:标签

  • 归属:bean标签

  • 作用:使用set方法的形式为bean提供资源

  • 格式:

    • <bean>
      	<property />
      </bean>
      
  • 基本属性:

    • <property name="propertyName" value="propertyValue" ref="beanId" />
      
      • name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)
      • value:设定非引用类型属性对应的值,不能与ref同时使用
      • ref:设定引用类型属性对应bean的id,不能与value同时使用
构造器注入(了解)
  • 名称:constructor-arg

  • 类型:标签

  • 归属:bean标签

    • 作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作
  • 格式:

    • <bean>
      	<constructor-arg />
      </bean>
      
  • 基本属性:

    • <constructor-arg name="argsName" value="argsValue" />
      
      • name:对应bean中的构造方法所携带的参数名
      • value:设定非引用类型构造方法参数对应的值,不能与ref同时使用

集合类型数据注入

  • 名称:array,list,set,map,props

  • 类型:标签

  • 归属:property标签或者constructor-arg标签

  • 作用:注入集合数据类型属性

  • 格式:

    • <property>
      	<list></list>
      </property>
      
  • <bean id="userService" class="com.spring.service.impl.UserServiceImpl">
            <property name="userDao" ref="userDao"/>
            <property name="bookDao" ref="bookDao"/>
        </bean>
    
        <bean id="bookDao" class="com.spring.dao.impl.BookDaoImpl">
            <property name="al">
                <list>
                    <value>list</value>
                    <value>list</value>
                </list>
            </property>
            <property name="properties">
                <props>
                    <prop key="name">prop</prop>
                    <prop key="value">prop</prop>
                </props>
            </property>
            <property name="arr">
                <array>
                    <value>array</value>
                    <value>array</value>
                </array>
            </property>
            <property name="hs">
                <set>
                    <value>set</value>
                    <value>set</value>
                </set>
            </property>
            <property name="hm">
                <map>
                    <entry key="name" value="map"/>
                    <entry key="value" value="map"/>
                </map>
            </property>
        </bean>
    

P命名空间的引入和使用

  • 名称:p:propertyName,p:propertyName-ref

  • 类型:属性

  • 归属:bean标签

  • 作用:为bean注入属性值(相当于简写格式)

  • 格式:

    • <bean p:propertyName="p:propertyValue" p:propertyName-ref="beanId"/>
      
  • 注意事项:使用p命名需要得到spring对p命名空间的支持,在bean标签中添加对应空间支持

    • <beans
             xmlns:p="http://www.springframework.org/schema/p">
      </beans>
      
  • 案例:

    •   <bean
              id="userService"
              class="com.spring.service.impl.UserServiceImpl"
              p:userDao-ref="userDao"
              p:bookDao-ref="bookDao"
              />
      

SpEL(了解)

  • Spring提供了对EL表达式的支持,统一属性注入格式

  • 类型:属性值

  • 归属:value属性值

  • 作用:为bean注入属性值,可以把ref统一更改为value(引用类型和非引用类型都统一使用value)

  • 格式:

    • <bean>
      	<property value="EL"></property>
      </bean>
      
      
  • 案例:

    •     <bean id="userService" class="com.spring.service.impl.UserServiceImpl">
              <property name="userDao" value="#{userDao}"/>
              <property name="bookDao" value="#{bookDao}"/>
              <property name="num" value="#{6666}"/>
              <property name="version" value="#{'EL'}"/>
          </bean>
      

读取propertys文件信息

  • Spring提供了读取外部propertys文件的机制,使用读取到的数据为bean的属性赋值

  • 操作步骤:

    • 1.准备外部propertys文件

    • 2.开启context命名空间

      • <beans xmlns:context="http://www.springframework.org/schema/context">
        </beans>
        
    • 3.加载指定的propertys文件

      •     <context:property-placeholder location="classpath:filename.properties"/>
        
    • 4.使用加载的数据

      •  <property name="userName" value="${username}"/>
        
  • 注意:如果需要加载所有的propertys文件,可以使用*.propertys表示加载所有的propertys文件

    •     <context:property-placeholder location="classpath:*.properties"/>
      
  • 注意:读取数据使用${propertiesName}格式进行

import导入配置文件(团队开发)

  • 名称:import

  • 类型:标签

  • 归属:bean标签

  • 作用:在当前配置文件中导入其它配置文件的项(就是把项目不同的模块进行拆分)

  • 格式:

    • <beans>
      	<import />
      </beans>
      
  • 基本属性:

    • <import resources="config.xml" />
      
      • resources:加载的配置文件名

第三方资源配置

  • 案例:导入阿里数据源Druid

    • 	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
              <property name="driverClassName" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
          </bean>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值