Spring中xml标签abstract和parent使用
1. 概述
本篇博客主要记录和练习Spring中xml配置下,标签abstract和parent的用法。
代码设定:
主程序包括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在通过abstract和parent引入bean模板时,也可以通过property标签,自定义属性值,且优先级大于模板,能够覆盖属性值