zoukankan      html  css  js  c++  java
  • Spring配置文件,DI

    3、创建对象的方式

    3.1、无参构造方法

    <bean id="user" class="com.ch.pojo.User">
        <property name="name" value="张三"></property>
    </bean>
    

    3.2、有参构造方法

    (1)使用属性名创建

    <bean id="user" class="com.ch.pojo.User">
        <constructor-arg name="name" value="张三"></constructor-arg>
    </bean>
    

    (2)使用参数下标创建

    <bean id="user" class="com.ch.pojo.User">
        <constructor-arg index="0" value="张三"></constructor-arg>
    </bean>
    

    (3)使用属性类型创建(不建议使用)

    存在问题:①可能数据类型写错;②可能有多个相同类型的属性

    <bean id="user" class="com.ch.pojo.User">
        <constructor-arg type="java.lang.String" value="张三"></constructor-arg>
    </bean>
    

    4、xml配置

    4.1、bean

    <bean id="user" class="com.ch.pojo.User" name="u1 u2 u3,u4"></bean>
    

    id:自定义的变量名

    class:bean对象的全限定名(包名+类名)

    name:取别名,比alias高级,可以用空格|逗号|混搭取多个别名

    4.2、alias

    <alias name="user" alias="uu"></alias>
    

    只能取一个别名

    4.3、import

    <import resource="beans.xml"></import>
    <import resource="beans1.xml"></import>
    

    合并其他的配置文件

    5、依赖注入DI

    以前的理解:依赖注入就是注入对象的时候,连同他的依赖关系一同注入。

    目前:分开解释

    依赖:bean对象的创建依赖容器

    注入:bean对象中的属性由容器注入

    5.1、构造器注入

    3中以及实现过

    5.2、属性注入

    属性注入的前提:必须要有set方法才能注入

    pojo:Student

    @Data
    public class Student implements Serializable {
        private String uname;
        private Double[] scores;
        private List<String> books;
        private Teacher teacher;
        private Set<String> subject;
        private Map<String, String> map;
        private String tube;
        private Properties properties;
    }
    
    <bean id="teacher" class="com.ch.pojo.Teacher">
        <constructor-arg name="tid" value="0001"></constructor-arg>
        <constructor-arg name="tname" value="李颖"></constructor-arg>
    </bean>
    
    <bean id="student" class="com.ch.pojo.Student">
        <!-- 普通属性注入:String -->
        <property name="uname" value="张三"></property>
    
        <!-- 数组注入 -->
        <property name="scores">
            <array>
                <value>75.5</value>
                <value>75.6</value>
                <value>75.7</value>
            </array>
        </property>
    
        <!-- list注入  -->
        <property name="books">
            <list>
                <value>语文</value>
                <value>数学</value>
                <value>英语</value>
            </list>
        </property>
    
        <!-- set注入 -->
        <property name="subject">
            <set>
                <value>体育</value>
                <value>音乐</value>
            </set>
        </property>
    
        <!-- 对象注入 -->
        <property name="teacher" ref="teacher"></property>
    
        <!-- map注入 -->
        <property name="map">
            <map>
                <entry key="音乐" value="肖恩"></entry>
            </map>
        </property>
    
        <!-- null值注入 -->
        <property name="tube">
            <null/>
        </property>
    
        <!-- properties注入 -->
        <property name="properties">
            <props>
                <prop key="driver">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>
    

    5.3、拓展注入

    p命名空间

    <bean id="user" class="com.ch.pojo.User" p:name="张三"></bean>
    

    注意

    (1)一定要先在xml文件中导入约束才能用

    (2)类中一定要有无参构造方法,否则不能使用p命名空间

    (3)和属性注入相同的操作

    xmlns:p="http://www.springframework.org/schema/p"
    

    c命名空间

    <bean id="user" class="com.ch.pojo.User" c:name="李四"></bean>
    

    注意

    (1)一定要先在xml文件中导入约束才能用

    (2)类中一定要有有参构造方法,否则不能使用c命名空间

    (3)和构造器注入相同的操作

    xmlns:c="http://www.springframework.org/schema/c"
    

    6、Bean作用域(bean scope)

    7、Bean自动装配

    7.1、byName

    User.java

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable {
        private String name;
        private Student student;
        private Teacher teacher;
    }
    

    applicationContext.xml

    <bean id="teacher" class="com.ch.pojo.Teacher"></bean>
    <bean id="student" class="com.ch.pojo.Student"></bean>
    
    <bean id="user" class="com.ch.pojo.User" autowire="byName"></bean>
    

    注意:

    (1)id必须唯一,否则通过id的name装配的时候会报错

    (2)byName装配是根据属性名与id对应查询装配的

    (3)前提条件:id对应属性名,属性必须要要有set方法,否则结果均为null

    7.2、byType

    applicationContext.xml

    <bean id="teacher" class="com.ch.pojo.Teacher"></bean>
    <bean id="student" class="com.ch.pojo.Student"></bean>
    
    <bean id="user" class="com.ch.pojo.User" autowire="byType"></bean>
    

    注意:

    (1)id可以省略

    (2)byType是根据属性的类型进行查找装配的

    (3)如果有两个相同类型的话,依旧会报错

  • 相关阅读:
    第十一周助教小结
    第十周助教小结
    第九周助教小结
    第八周助教小结
    第七周助教小结
    第六周助教小结
    第五周助教小结
    [SHOI2006]有色图
    [JSOI2019]神经网络
    【CF 715E】Complete the Permutations
  • 原文地址:https://www.cnblogs.com/IT_CH/p/13493188.html
Copyright © 2011-2022 走看看