spring 加载xml 创建实例对象demo

第一次写博客,也不知道咋写。就直接上代码了。写完了这个demo后可以加深对spring 如何创建对象的理解

package org.example;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 工厂接口实现类
*
*
* */
public class MyClasssXmlComplacation implements MyFactory {
//定义map对象用来存放id与class属性
private Map<String, Object> beanMap=new HashMap<>();
//定义集合存放配置文件中bean
List<MyBean> myBeanList;
public MyClasssXmlComplacation(String fileName) throws DocumentException, IllegalAccessException, InstantiationException, ClassNotFoundException {
// 解析配置文件
parseXml(fileName);
instanceBean();
}
private void instanceBean() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
for (MyBean myBean:myBeanList){
Object o = Class.forName(myBean.getClazz()).newInstance();
beanMap.put(myBean.getId(),o);
}
}
private void parseXml(String fileName) throws DocumentException {
SAXReader saxReader =new SAXReader();
URL resource = this.getClass().getClassLoader().getResource(fileName);
Document document =saxReader.read(resource);
XPath xPath =document.createXPath("beans/bean");
List<Element> elements =xPath.selectNodes(document);
if(elements!=null&&elements.size()>0){
myBeanList =new ArrayList<>();
for (Element element:elements){
String id = element.attributeValue("id");
String aClass = element.attributeValue("class");
MyBean myBean = new MyBean(id, aClass);
myBeanList.add(myBean);
}
}
}
@Override
public Object getBean(String id) {
Object id1 = beanMap.get(id);
return id1;
}
}


package org.example;
//放取配置文件的id与class属性值

/**
*实体类
*/
public class MyBean {
private String id;
private String clazz;

public MyBean() {
}

public MyBean(String id, String clazz) {
this.id = id;
this.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;
}

@Override
public String toString() {
return "MyBean{" +
"id='" + id + '\'' +
", clazz='" + clazz + '\'' +
'}';
}
}
/**
* 模拟工厂接口
*/

package org.example;

public interface MyFactory {

public Object getBean (String id);
}

xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="userDao" class="org.example.UserDao"></bean>
<bean id="user01Service" class="org.example.User01Service"></bean>
</beans>

maven依赖
 <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- 读取配置文件-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
/**
*调用
*/
package org.example;

import org.dom4j.DocumentException;

public class Start {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, DocumentException, IllegalAccessException {
//得到spring 上下文环境
// ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
// UserService userService = (UserService) app.getBean("userService");
// userService.test();
MyFactory myFactory = new MyClasssXmlComplacation("spring01.xml");
UserDao userDao = (UserDao) myFactory.getBean("userDao");
userDao.test();

}
}


posted @ 2021-11-09 09:36  才才的博客  阅读(131)  评论(0)    收藏  举报