1. 程式人生 > 實用技巧 >Spring配置檔案

Spring配置檔案

目錄

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)如果有兩個相同型別的話,依舊會報錯