Spring-IOC

IOC:

    IOC也叫做控制反转。 

    概念:解决了类与类之间的依赖关系(耦合),对象不用由我们手动创建,是由 spring 容器来完成创建,

               并维护对象与对象之间的关系。

     控制反转:也就是依赖注入,给类中的属性赋值,由原来的类中完成,转移到 spring 工厂中完成。

                       在Java开发中,设计好的类在内部控制,导致代码冗余,对象与对象之间耦合在一起。

                       IOC时是将你设计好的类交给 spring容器 来控制,而不是在内部去控制,称之为控制反转

    IOC中的 DI(依赖注入)

            DI就是三种注入方式:

                   设值注入:set方法实现        使用<property name="对象中的属性" value="为该属性赋值" />

                   构造注入:调用指定参数的构造方法实现  使用<constructor-arg index="指定索引" type="指定类型" />

                   自动装配:set方法实现    需要使用bean标签的属性 autowire="byName / byType" 来完成

                                      byName:类中的属性名跟 spring容器创建对象的名字(bean标签的id)一样,就执行自动状配

                                      byType:spring容器创建的对象,跟类中的属性类型一致,就执行自动装配

                                                      如果由多个类型一致的对象,就会报异常。

 

    自动装配

对象创建的次数 和 对象的生命周期

创建对象的次数

Spring 对象创建的次数由 <bean> 标签的 scope 属性控制

scope 属性值: scope是一个默认值,值是 singleton

  1. singleton 单例 (单态) 整个项目运行期间只创建一个对象

         ( 一些使用场景:sqlSessionFactory /  service / dao)

  1. prototype 非单例 每次使用都会创建一个新的对象 (一些使用场景: action / sqlsession )
  2. request 一起请求就创建一个新的对象 Web项目中使用
  3. session 一次会话就创建一个新的对象 Web项目中使用

对象生命的周期

创建时机:

  1. 单列对象,加载配置文件的时候,创建一次
  2. 非单例对象,每使用一次,就创建一次

销毁:

  1. 当工厂关闭的时候,销毁对象

         工厂关闭:工厂里面有一个 close() 方法,调用改方法就是关闭工厂。

    

DI(依赖注入)的使用

            设值注入: <property />

<bean id="xxx" class="类全路径">
    基本数据类型的注入
    <property name="类中的属性" value="值" />   自闭和
    <property name="类中的属性">
        <value>值</value>
    </property>

     集合/数组类型属性赋值
    <property name="list">
        <list>
            <value>值</value>
        </list>
    </property>

    set集合属性赋值
    <property name="set">
        <set>
            <value> 需要赋的值</value>
        </set>
    </property>

    map集合属性赋值
    <property name="map">
        <map>
            <entry key="键" value="值"></entry>
        </map>
    </property>

    自定义属性赋值
    <property name="obj">
        <property name="books" ref="book" />
    </property>

    集合是泛型是自定义的属性赋值
    <property name="b_list">
			<list>
                       <ref <ref bean="引用bean标签的 id"/> />
                       <ref <ref bean="引用bean标签的 id"/> />
			</list>
   
          <!-- Map给自定义类型赋值是  -->
            <map>
                <entry key="键" value-ref="值"></entry>
            </map>
	</property>

    给 properties 类型属性赋值
        <property name="b_properties">
 			<props>
 				<prop key="CN">中国</prop>
 			</props>
 		</property>

</bean>

           构造注入 <constructor-arg index="该值对应的参数的索引"  type="类型全类名">

bean id="classifySV" class="com.service.impl.ClassifySVImpl">
    给 单个基本类型参数 的构造方法赋值
    <constructor-arg index="该值对应的参数的所以" type="类型全类名">
        <value>xxx</value>
    </constructor-arg>
    
    给 多个基本类型参数 的构造方法赋值
    <constructor-arg index="该值对应的参数的所以" type="类型全类名">
        <value>xxx</value>
    </constructor-arg>
    <constructor-arg index="该值对应的参数的所以" type="类型全类名">
        <value>xxx</value>
    </constructor-arg>
    
    给 自定义类型参数 的构造方法赋值
    <constructor-arg index="该值对应的参数的所以" type="类型全类名">
        <ref bean="classifyDAO"/> <!--引用一个对象-->
    </constructor-arg>
</bean>
 

         

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值