现要对下面的配置文件进行解析,并自定义Spring框架的IOC对涉及到的对象进行管理。
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>
1 定义bean相关的pojo类
1.1 PropertyValue类
用于封装bean的属性,体现到上面的配置文件就是封装bean标签的子标签property标签数据。
/**
* @version v1.0
* @ClassName: PropertyValue
* @Description: 用来封装bean标签下的property标签的属性
* name属性
* ref属性
* value属性 : 给基本数据类型及String类型数据赋的值
*/
public class PropertyValue {
private String name;
private String ref;
private String value;
public PropertyValue( {
}
public PropertyValue(String name, String ref,String value {
this.name = name;
this.ref = ref;
this.value = value;
}
public String getName( {
return name;
}
public void setName(String name {
this.name = name;
}
public String getRef( {
return ref;
}
public void setRef(String ref {
this.ref = ref;
}
public String getValue( {
return value;
}
public void setValue(String value {
this.value = value;
}
}
1.2 MutablePropertyValues类
一个bean标签可以有多个property子标签,所以再定义一个MutablePropertyValues类,用来存储并管理多个PropertyValue对象。
/**
* @version v1.0
* @ClassName: MutablePropertyValues
* @Description: 用户存储和管理多个PropertyValue对象
*/
public class MutablePropertyValues implements Iterable<PropertyValue> {
//定义list集合对象,用来存储PropertyValue对象
private final List<PropertyValue> propertyValueList;
public MutablePropertyValues( {
this.propertyValueList = new ArrayList<PropertyValue>(;
}
public MutablePropertyValues(List<PropertyValue> propertyValueList {
this.propertyValueList = (propertyValueList != null ? propertyValueList : new ArrayList<PropertyValue>(;
}
//获取所有的PropertyValue对象,返回以数组的形式
public PropertyValue[] getPropertyValues( {
//将集合转换为数组并返回
return this.propertyValueList.toArray(new PropertyValue[0];
}
//根据name属性值获取PropertyValue对象
public PropertyValue getPropertyValue(String propertyName {
//遍历集合对象
for (PropertyValue pv : this.propertyValueList {
if (pv.getName(.equals(propertyName {
return pv;
}
}
return null;
}
//获取迭代器对象
@Override
public Iterator<PropertyValue> iterator( {
return propertyValueList.iterator(;
}
//判断集合是否为空
public boolean isEmpty( {
return this.propertyValueList.
编程笔记 » 设计模式(三十)----综合应用-自定义Spring框架-自定义Spring IOC-定义bean/注册表相关类