版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MadCode2222222222222/article/details/78769851
效果:
xml配置文件:
运行效果:(对象为单例)
实现思路:
1.创建实体类
Student.java
package com.bean;
public class Student {
private int id;
private String name;
private String sex;
private int age;
private String hobby;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int id, String name, String sex, int age, String hobby) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.hobby = hobby;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
User.java
package com.bean;
public class User {
private int _id;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public int get_id() {
return _id;
}
public void set_id(int _id) {
this._id = _id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.在工程根目录新建xml配置文件beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="student" class="com.bean.Student">
</bean>
<bean id="user" class="com.bean.User">
</bean>
</beans>
3.核心工具类:
①Dom4j解析beans.xml,将id和class属性值保存进对象Bean
Bean类:
package com.bean;
public class Bean {
private String id;
private String clazz;
public Bean() {
super();
// TODO Auto-generated constructor stub
}
public Bean(String id, String clazz) {
super();
this.id = id;
this.clazz = clazz;
}
@Override
public String toString() {
return "Bean [id=" + id + ", clazz=" + clazz + "]";
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
}
解析xml:(需要jar包dom4j)
// 获取所有xml中的所有bean
public void getBeans() {
list = new ArrayList<Bean>();
// 1创建dom4j的SAX解析
SAXReader sr = new SAXReader();
// 2加载xml文件获取dom4j的Document对象
System.out.println("getBeans:" + file.getName());
try {
Document document = sr.read(file);
// 3获取根元素
Element root_element = document.getRootElement();
List<Element> bean_list = root_element.elements("bean");
for (Element element : bean_list) {
String id = element.attributeValue("id");
String clazz = element.attributeValue("class");
Bean bean = new Bean(id, clazz);
list.add(bean);
}
for (Bean bean : list) {
System.out.println(bean.toString());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
②利用Java反射创建对象的方法
// 根据bean对象中的信息反射创建对象
public static Object createObj(String clazz) {
Object obj = null;
try {
Class cla = Class.forName(clazz);
obj = cla.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
③根据Bean对象中的信息,创建出对象,保存进Map集合,为根据id得到对象准备数据
// 创建beans中所有类的对象,保存进Map集合
public void createAllObj() {
map = new HashMap<String, Object>();
for (Bean bean : list) {
String id = bean.getId();
Object obj = createObj(bean.getClazz());
map.put(id, obj);
}
}
④提供getBean方法
public Object getBean(String id) {
Object obj = map.get(id);
return obj;
}
实现单例效果(在核心工具类创建对象时,调用方法,准备出数据)
public BeanUtils(String path) {
this.path = path;
file = new File(path);
// 解析xml,获取bean信息
getBeans();
// 根据bean创建对象信息
createAllObj();
}
完整代码下载:
CSDN下载地址: