zoukankan      html  css  js  c++  java
  • 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"/> 
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/fudapeng/p/3862723.html
Copyright © 2011-2022 走看看