• spring IOC控制反转 DI注入


    <!-- 初始化 init-method="init" 销毁destroy-method="destory" --> 
    <!--懒加载 lazy-init="true"  -->
        <bean id="IUDao" class="dao.IUDao" scope="singleton" init-method="init" destroy-method="destory" lazy-init="true"></bean>

    bean的scope属性

    1:singleton(默认单例)—每次从spring container 中返回一个单例对象,不进行新对象的创建;
    2:prototype—每次从spring container中返回不同的对象,每次进行新对象的创建
    3:request—返回一个single bean 对象 每次 HTTP request
    4:session—返回一个single bean 对象 每次 HTTP session

    bean的id和name的不同

    id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias,可以有多个,用逗号隔开,并可能与其他的bean重名,getBean()返回实例时,后面一个Bean被返回

    通过id和name都可以取出该Bean

    set注入

        java
        private IUDao iuDao;
        public void setIuDao(IUDao iuDao) {
            this.iuDao = iuDao;
        }    
    <bean id="userService" class="service.UserService" >
            <!-- name为set的方法名,ref为bean的id或name名 -->
            <property name="iuDao" ref="IUDao"></property>
        </bean>

    或者

    <bean id="userService" class="service.UserService" >
            <property name="iuDao">
                <ref bean="IUDao"/>
            </property>
        </bean> 

    ref属性:

    bean——去所有配置文件里面去找bean

    local——在当前配置文件找bean

    parent——去父类配置文件找

    构造方法注入  

        private UserDao userDao;     
           public UserSerivce(UserDao userDao) {     
                 this.userDao = userDao;     
    
          }     
    <bean id="userService" class="com.kaishengit.service.UserSerivce">     
                <constructor-arg name="userDao" ref="userDao"/>
    </bean>

    其他注入  

    <bean id="user" class="com.kaishengit.entity.User ">     
                  <property name="age" value="23"/>     
                  <property name="name" value="tom"/>     
                  <property name="addresses">     
                                <list>     
                                     <value>China</value>     
                                      <value>US</value>     
                                </list>     
                  </property>  
                 <property name="map">     
                              <map>     
                                   <entry key="a1" value="v1"></entry>     
                                   <entry key="a2" value="v2"></entry>     
                              </map>     
                 </property>     
                 <property name="pops">     
                              <props>     
                                     <prop key="p1">v1</prop>     
                                     <prop key="p2">v2</prop>     
                              </props>     
                 </property>     
    </bean> 


    使用构造方法注入的理由:

    •  构造方法注入使用强依赖规定,如果不给足够的参数,对象则无法创建。

    •  由于Bean 的依赖都通过构造方法设置了,那么就不用写更多的 set 方法,有助于减少代码量。

    使用 set 注入的理由:

    •  如果Bean有很多的依赖,那么构造方法的参数列表会变的很长。

    •  如果一个对象有多种构造方法,构造方法会造成代码量增加。

    •  如果构造方法中有两个以上的参数类型相同,那么将很难确定参数的用途。

    自动注入

    autowire的值 :
    •  no 默认值 ,不进行自动注入

    •  byName 根据需要set注入的属性名在容器内寻找id名称相同的Bean ,如果找到就注入 ,找不到就不注入

    •  byType 根据需要注入的属性类型在容器找类型相同的Bean ,如果找到就注入 ,找不到就不注入 ,如果找到多个
    类型相同的Bean ,则抛出异常

    •  constructor 类似byType注入 ,但是使用在构造方法之上

    <bean id="userService" class="com.kaishengit.service.UserSerivce" autowire="byType"/> 
  • 相关阅读:
    夜游遂宁滨江路
    易中天讲座十句人生感悟(发人深省,耐人寻味)
    遥望死海
    一直被忽略的成功之道:勤快并非优点,成功需要懒惰
    给别人以宽容,给自己以信心
    合理支配“财富”:经理人运用时间的12种典型模式
    三月的清晨
    学习的三重境界(想成功的人都不可错过)
    上班
    持续开发你的事业智慧:企业家保持冲锋势头的路径
  • 原文地址:https://www.cnblogs.com/fudapeng/p/3862723.html
Copyright © 2020-2023  润新知