• spring——依赖注入的三种方式


    1 构造器注入(与构造器有直接关系)
    1. 默认无参构造

    2. 3种构造方式:通过<contructor-arg>调用类中的构造器

      1. 下标

        <bean id="userService" class="com.guan.service.UserServiceImpl">
                <constructor-arg index="0" ref="apple"></constructor-arg>
        </bean>
        
      2. 类型

        <bean id="userService" class="com.guan.service.UserServiceImpl">
                <constructor-arg type="com.guan.dao.Fruit" ref="apple"></constructor-arg>
        </bean>
        
      3. 参数名(推荐使用)

        <bean id="userService" class="com.guan.service.UserServiceImpl">
            <constructor-arg name="fruit" ref="apple"></constructor-arg>
        </bean>
        
    3. 总结:

      (1).所有实例在配置文件加载时完成初始化

      (2).一个类在一个容器中只有一个实例(默认是单例模式)

    2 set注入(重点,与set方法有直接关系)
    1. 依赖注入的概念:

      • 依赖: bean对象的创建依赖于容器
      • 注入:bean对象中的所有属性,由容器注入
    2. 测试环境搭建

    public class Teacher {
    private String name;
    private int age;
    }

    
    ```java
    public class Student {
    
        private String name;
        private Teacher teacher;
        private int age;
        private String wife;
        private Properties info;
        private List<String> bookList;
        private String[] friends;
        private Set<String> things;//compared to list collection,the item of set can't be repeat.
        private Map<String,Object> eductationHistory;
    }
    

    几个集合的区别:

    (1).list和数组:list是动态伸缩的,而数组不是

    (2).list和set:set不能重复,list可以重复

    1. 使用配置文件进行配置

      <bean id="teacher" class="com.guan.bean.Teacher">
          <property name="name" value="蔡老师"></property>
          <property name="age" value="5"></property>
      </bean>
      
      <bean id="student" class="com.guan.bean.Student">
      
          <property name="name" value="小明"></property>
          <!--        1.class-->
          <property name="teacher" ref="teacher"></property>
      
          <property name="age" value="23"></property>
          <!--        2.null-->
          <property name="wife"><null></null></property>
          <!--        3.properties-->
          <property name="info">
              <props>
                  <prop key="喜欢的歌手">许嵩</prop>
                  <prop key="可能喜欢的事">写代码</prop>
              </props>
          </property>
          <!--        4.List-->
          <property name="bookList">
              <list>
                  <value>飘</value>
                  <value>百年孤独(最近在看)</value>
              </list>
          </property>
          <!--        5.array-->
          <property name="friends">
              <array>
                  <value>小王</value>
                  <value>小红</value>
                  <value>小火</value>
              </array>
          </property>
          <!--        6.set-->
          <property name="things">
              <set>
                  <value>敲代码</value>
                  <value>敲代码</value>
                  <value>敲代码</value>
              </set>
          </property>
          <!--        7.Map-->
          <property name="eductationHistory">
              <map>
                  <entry key="小学" value="五里屯"></entry>
                  <entry key="初中" value="张家口"></entry>
                  <entry key="高中" value="三门星"></entry>
              </map>
          </property>
      </bean>
      

      注意:

      (1).空值是通过标签<null/>

      (2).properties是通过标签<props/><prop>组合在一起配置的

      (3),map的value值写在<entry>标签

    3 其他方式
    1. p命名空间(property):可以直接在<bean>的像id一样赋值(通过set方法)
    2. c命名空间(construct):同上,只是使用的函数方式不同(通过construct方法)

    注意:需要先导入命名空间

    4 bean的作用域

    1. 单例模式(singletion):每次取得的都是同一个实例,一般用于单线程(默认)

      <bean id="teacher" class="com.guan.bean.Teacher" scope="singleton">
          <property name="name" value="蔡老师"></property>
          <property name="age" value="5"></property>
      </bean>
      
    2. 原型模式(prototype):每次get都会取得不同的实例,一般用于多线程

      <bean id="teacher" class="com.guan.bean.Teacher" scope="prototype">
          <property name="name" value="蔡老师"></property>
          <property name="age" value="5"></property>
      </bean>
      
    3. 其余的request,session,application只能在web开发中使用

  • 相关阅读:
    服务器 空间
    android 手动打包
    sql server 2000 完全卸载 2
    apk 优化
    asp.net 画 数据图表
    java 运行 bat win linux
    vb 生成 批处理
    国内平台
    委托
    observer 观察者模式
  • 原文地址:https://www.cnblogs.com/Arno-vc/p/13387390.html
Copyright © 2020-2023  润新知