Spring_DI_XML_03

歡迎移步博客查看-http://futaosmile.oschina.io/coder957

基于XMl的DI

  1. 匿名Bean
  2. 匿名內(nèi)部Bean
  3. 同類抽象Bean
  4. 異類抽象Bean
  5. 多個(gè)配置文件-平行關(guān)系
  6. 多個(gè)配置文件-包含關(guān)系

Java中的匿名內(nèi)部類

匿名Bean

沒有id,但是可以通過autowire="byType"找到。
即:不能通過getBean()得到這個(gè)Bean
School類

package Part03.InnerNonameBean;

/**
 * Created by futao on 2017/10/12.
 */
public class School {
    private String sname;

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    @Override
    public String toString() {
        return "School{" +
                "sname='" + sname + '\'' +
                '}';
    }
}

Student類

package Part03.InnerNonameBean;

/**
 * Created by futao on 2017/10/12.
 */
public class Student {
    private String sname;
    private int age;
    private School school;

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public School getSchool() {
        return school;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sname='" + sname + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--這個(gè)bean沒有id屬性,所以是匿名的-->
    <bean class="Part03.InnerNonameBean.School">
        <property name="sname" value="Ecjtu"/>
    </bean>
    <bean id="student" class="Part03.InnerNonameBean.Student" autowire="byType">
        <property name="sname" value="小王"/>
        <property name="age" value="18"/>
    </bean>
</beans>

測(cè)試

  /**
     * 匿名類/匿名內(nèi)部類
     */
    @Test
    fun test4NonameBean() {
        val classPathXmlApplicationContext = ClassPathXmlApplicationContext("applicationContextInnerNonameBean.xml")
        val student = classPathXmlApplicationContext.getBean("student") as Part03.InnerNonameBean.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student))
    }

結(jié)果

{
  "sname": "小王",
  "age": 18,
  "school": {
    "sname": "Ecjtu"
  }
}

匿名內(nèi)部Bean

特點(diǎn):
1.匿名的,所以該bean在配置文件中沒有id屬性,也就不能通過getBean()得到
2.內(nèi)部的,該bean被其他bean的屬性標(biāo)簽包裹,所以也無法通過autowire="byType"得到。所以這個(gè)bean只能被這個(gè)包裹他的bean所使用

修改配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="student" class="Part03.InnerNonameBean.Student">
        <property name="sname" value="小王"/>
        <property name="age" value="18"/>
        <property name="school">
            <!--1.這個(gè)bean沒有id屬性,所以是匿名的-->
            <!--2.這個(gè)bean是在student的school屬性中,所以是內(nèi)部的-->
            <bean class="Part03.InnerNonameBean.School">
                <property name="sname" value="Ecjtu"/>
            </bean>
        </property>
    </bean>
</beans>

同類抽象Bean

abstract="true"
Student類

package Part03.SameAbstractBean;

/**
 * Created by futao on 2017/10/12.
 */
public class Student {
    private String sname;
    private int age;
    private String school;
    private String department;

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sname='" + sname + '\'' +
                ", age=" + age +
                ", school='" + school + '\'' +
                ", department='" + department + '\'' +
                '}';
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--傳統(tǒng)方式,代碼大量冗余-->
    <bean id="student1" class="Part03.SameAbstractBean.Student">
        <property name="sname" value="張三"/>
        <property name="age" value="18"/>
        <property name="school" value="Ecjtu"/>
        <property name="department" value="計(jì)算機(jī)學(xué)院"/>
    </bean>
    <bean id="student2" class="Part03.SameAbstractBean.Student">
        <property name="sname" value="李四"/>
        <property name="age" value="38"/>
        <property name="school" value="NCDX"/>
        <property name="department" value="軟件學(xué)院"/>
    </bean>
    <bean id="student3" class="Part03.SameAbstractBean.Student">
        <property name="sname" value="王五"/>
        <property name="age" value="68"/>
        <property name="school" value="SHJD"/>
        <property name="department" value="計(jì)算機(jī)科學(xué)學(xué)院"/>
    </bean>
    <!--同類抽象Bean,抽象的 abstract="true"-->
    <bean id="baseStudent" class="Part03.SameAbstractBean.Student" abstract="true">
        <property name="school" value="Ecjtu"/>
        <property name="department" value="計(jì)算機(jī)科學(xué)"/>
    </bean>
    <bean id="student1-1" parent="baseStudent">
        <property name="age" value="100"/>
    </bean>
    <bean id="student1-2" parent="baseStudent">
        <property name="school" value="NCDX"/>
    </bean>
</beans>

測(cè)試

 /**
     * 同類抽象Bean
     */
    @Test
    fun test4SameAbstractBean() {
        val classPathXmlApplicationContext = ClassPathXmlApplicationContext("applicationContextSameAbstractBean.xml")
//        val student1 = classPathXmlApplicationContext.getBean("student1") as Part03.SameAbstractBean.Student
//        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student1))
//        val student2 = classPathXmlApplicationContext.getBean("student2") as Part03.SameAbstractBean.Student
//        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student2))
//        val student3 = classPathXmlApplicationContext.getBean("student3") as Part03.SameAbstractBean.Student
//        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student3))

        val baseStudent = classPathXmlApplicationContext.getBean("baseStudent") as Part03.SameAbstractBean.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(baseStudent))
        val student11 = classPathXmlApplicationContext.getBean("student1-1") as Part03.SameAbstractBean.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student11))
        val student12 = classPathXmlApplicationContext.getBean("student1-2") as Part03.SameAbstractBean.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student12))


    }

結(jié)果

{
  "sname": null,
  "age": 0,
  "school": "Ecjtu",
  "department": "計(jì)算機(jī)科學(xué)"
}
{
  "sname": null,
  "age": 100,
  "school": "Ecjtu",
  "department": "計(jì)算機(jī)科學(xué)"
}
{
  "sname": null,
  "age": 0,
  "school": "NCDX",
  "department": "計(jì)算機(jī)科學(xué)"
}

異類抽象Bean

將一部分bean的某些相同的屬性拿出來,組成一個(gè)bean,這個(gè)bean沒有class,需要標(biāo)注abstract="true"

Student類

package Part03.DiffAbstractBean;

/**
 * Created by futao on 2017/10/12.
 */
public class Student {
    private String name;
    private int age;
    private String school;
    private String department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school='" + school + '\'' +
                ", department='" + department + '\'' +
                '}';
    }
}

Teacher類

package Part03.DiffAbstractBean;

/**
 * Created by futao on 2017/10/12.
 */
public class Teacher {
    private String name;
    private int wordAge;
    private String school;
    private String department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getWordAge() {
        return wordAge;
    }

    public void setWordAge(int wordAge) {
        this.wordAge = wordAge;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", wordAge=" + wordAge +
                ", school='" + school + '\'' +
                ", department='" + department + '\'' +
                '}';
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--異類抽象Bean-->
    <bean id="baseBean" abstract="true">
        <property name="school" value="華東交通大學(xué)111"/>
        <property name="department" value="計(jì)算機(jī)科學(xué)"/>
    </bean>
    <bean id="student" class="Part03.DiffAbstractBean.Student" parent="baseBean">
        <property name="name" value="張三"/>
        <property name="age" value="23"/>
        <!--<property name="school" value="Ecjtu"/>-->
        <!--<property name="department" value="軟件學(xué)院"/>-->
    </bean>
    <bean id="teacher" class="Part03.DiffAbstractBean.Teacher" parent="baseBean">
        <property name="name" value="老王"/>
        <property name="wordAge" value="18"/>
        <!--<property name="department" value="軟件學(xué)院"/>-->
        <!--<property name="school" value="Ecjtu"/>-->
    </bean>
</beans>

測(cè)試

/**
     * 異類抽象Bean
     */
    @Test
    fun test4DiffAbstractBean() {
        val classPathXmlApplicationContext = ClassPathXmlApplicationContext("applicationContextDiffAbstractBean.xml")
        val student = classPathXmlApplicationContext.getBean("student") as Part03.DiffAbstractBean.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student))

        val teacher = classPathXmlApplicationContext.getBean("teacher") as Teacher
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(teacher))
    }

結(jié)果

{
  "name": "張三",
  "age": 23,
  "school": "華東交通大學(xué)111",
  "department": "計(jì)算機(jī)科學(xué)"
}
{
  "name": "老王",
  "wordAge": 18,
  "school": "華東交通大學(xué)111",
  "department": "計(jì)算機(jī)科學(xué)"
}

為Spring 配置多個(gè)子配置文件-平行關(guān)系

多個(gè)配置文件,加載的時(shí)候加載多個(gè)就行

配置文件1

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="Part03.ManyChildXmlFileParallel.Student">
    <property name="name" value="File1"/>
    <property name="age" value="18"/>
    <property name="school" value="華東交通大學(xué)"/>
    <property name="department" value="軟件"/>
</bean>
</beans>

配置文件2

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="teacher" class="Part03.ManyChildXmlFileParallel.Teacher">
        <property name="name" value="File2"/>
        <property name="wordAge" value="28"/>
        <property name="department" value="計(jì)算機(jī)"/>
        <property name="school" value="Ecjjtu"/>
    </bean>
</beans>

測(cè)試

     /**
     * 為Spring配置多個(gè)配置文件-平行關(guān)系
     */
    @Test
    fun test4ManyChildXmlFile() {
             //使用通配符*
        //val classPathXmlApplicationContext = ClassPathXmlApplicationContext("applicationContextManyChildXmlFile*")
        val classPathXmlApplicationContext = ClassPathXmlApplicationContext("applicationContextManyChildXmlFile1.xml", "applicationContextManyChildXmlFile2.xml")
        val student = classPathXmlApplicationContext.getBean("student") as Part03.ManyChildXmlFileParallel.Student
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(student))

        val teacher = classPathXmlApplicationContext.getBean("teacher") as Part03.ManyChildXmlFileParallel.Teacher
        println(GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(teacher))

    }

結(jié)果

{
  "name": "File1",
  "age": 18,
  "school": "華東交通大學(xué)",
  "department": "軟件"
}
{
  "name": "File2",
  "wordAge": 28,
  "school": "Ecjjtu",
  "department": "計(jì)算機(jī)"
}

為Spring配置多個(gè)子配置文件-包含關(guān)系

在主配置中使用<import />將子配置文件導(dǎo)入到主配置文件中,所以程序只需要加載主配置文件。
主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--導(dǎo)入子配置文件-->
    <!--<import resource="applicationContextManyChildXmlFile1.xml"/>-->
    <!--<import resource="applicationContextManyChildXmlFile2.xml"/>-->
    <!--使用通配符-->
    <import resource="applicationContextManyChildXmlFile*.xml"/>
</beans>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,706評(píng)論 18 399
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,493評(píng)論 2 7
  • 我們生活到底有多少機(jī)會(huì)能去到一個(gè)深夜食堂? 在我簡(jiǎn)單趣樂的學(xué)生生涯,光顧的差不多都是校門校內(nèi)的零食店,小吃攤。半夜...
    BruceKou閱讀 518評(píng)論 0 0

友情鏈接更多精彩內(nèi)容