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
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="company" class="com.liwl.dev.CompanyImpl"/>
<bean id="comp" abstract="true">
<property name="name" value="nsccwx"/>
<property name="address" value="江苏无锡"/>
<property name="company" ref="company"/>
</bean>
<bean id="liwl" class="com.liwl.dev.LiwanLiangImpl" parent="comp"/>
<bean id="school" class="com.liwl.dev.SchoolImpl" parent="comp"/>
</beans>
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
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="company" class="com.liwl.dev.CompanyImpl">
<property name="name" value="nsccwx"/>
<property name="address" value="江苏无锡"/>
</bean>
<bean id="comp" abstract="true">
<property name="company" ref="company"/>
</bean>
<bean id="liwl" class="com.liwl.dev.LiwanLiangImpl" parent="comp">
<property name="name" value="liwl"></property>
<property name="address" value="江苏无锡liwl"></property>
</bean>
<bean id="school" class="com.liwl.dev.SchoolImpl" parent="comp">
<property name="name" value="school"/>
<property name="address" value="江苏无锡school"/>
</bean>
</beans>
运行结果
[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
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="company" class="com.liwl.dev.CompanyImpl">
<property name="name" value="nsccwx"/>
<property name="address" value="江苏无锡"/>
</bean>
<bean id="comp" abstract="true">
<property name="name" value="liwl"></property>
<property name="company" ref="company"/>
</bean>
<bean id="liwl" class="com.liwl.dev.LiwanLiangImpl" parent="comp">
<!--
<property name="name" value="liwl"></property>
-->
<property name="address" value="江苏无锡liwl"></property>
</bean>
<bean id="school" class="com.liwl.dev.SchoolImpl" parent="comp">
<property name="name" value="school"/>
<property name="address" value="江苏无锡school"/>
</bean>
</beans>
总结:
LiwanLiangImpl和SchoolImpl在通过abstract
和parent
引入bean模板时,也可以通过property
标签,自定义属性值,且优先级大于模板,能够覆盖属性值