Spring中xml标签abstract和parent使用


1. 概述

本篇博客主要记录和练习Spring中xml配置下,标签abstractparent的用法。

代码设定:

主程序包括3个实现类:

  • LiwanLiangImpl
  • SchoolImpl
  • CompanyImpl

其中,LiwanLiangImpl和SchoolImpl依赖于CompanyImpl

本篇博客代码基于之前的代码修改,主要目的在于练习xml配置的标签使用

2. 代码及测试

LiwanLiangImpl的源码

package com.liwl.dev;

public class LiwanLiangImpl implements LiwanLiang{
    
    private String name;
    private String address;
    private Company company;

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    @Override
    public String toString() {
        return "[LiwanLiangImpl bean info]" + "\nname:" + name + "\naddress:" + address + "\ncompany:" + company; 
    }
}

SchoolImpl的源码

package com.liwl.dev;

public class SchoolImpl implements School{

    private String name;
    private String address;
    private Company company;

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    @Override
    public String toString() {
        return "[SchoolImpl bean info]" + "\nname:" + name + "\naddress:" + address + "\ncompany:" + company;
    }
}

Company.java

package com.liwl.dev;

public class CompanyImpl implements Company {

    private String name;
    private String address;

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }


    @Override
    public String toString() {
        return "[CompanyImpl bean info]" + "\nname:" + name + "\naddress:" + address;
    }
}

springdi.xml




    

    
        
        
        
    

    
    



LiwlTest.java

package com.liwl.dev;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class LiwlTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springdi.xml");
        LiwanLiangImpl liwl = (LiwanLiangImpl) context.getBean("liwl");
        SchoolImpl sch = (SchoolImpl) context.getBean("school");
        System.out.println(liwl);
        System.out.println(sch);
        context.close();
    }
}

运行结果

[LiwanLiangImpl bean info]
name:nsccwx
address:江苏无锡
company:[CompanyImpl bean info]
name:null
address:null
[SchoolImpl bean info]
name:nsccwx
address:江苏无锡
company:[CompanyImpl bean info]
name:null
address:null

总结:

能够看到LiwanLiangImpl和SchoolImpl已经被注入了CompanyImpl的bean的初始值

修改springdi.xml




    
        
        
    

    
        
    

    
        
        
    

    
        
        
    



运行结果

[LiwanLiangImpl bean info]
name:liwl
address:江苏无锡liwl
company:[CompanyImpl bean info]
name:nsccwx
address:江苏无锡
[SchoolImpl bean info]
name:school
address:江苏无锡school
company:[CompanyImpl bean info]
name:nsccwx
address:江苏无锡

修改springdi.xml




    
        
        
    

    
        
        
    

    
        
        

    

    
        
        
    



总结:

LiwanLiangImpl和SchoolImpl在通过abstractparent引入bean模板时,也可以通过property标签,自定义属性值,且优先级大于模板,能够覆盖属性值