话不多说,开干…
1、创建spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.zeny.anotationservice.service.impl.UserServiceImpl"></bean>
</beans>
2、创建ClassPathXmlApplicationVersion.java
/**
* @ClassName ClassPathXmlApplicationVersion
* @Description 手写基于xml版本的IOC容器
* @Author zeny
* @Date 2020/2/7 23:25
* @Version 1.0
*/
public class ClassPathXmlApplicationVersion {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationVersion ioc = new ClassPathXmlApplicationVersion("spring.xml");
UserService userService = (UserService) ioc.getBean("userService");
userService.sayHello();
}
private String xmlPath;
public ClassPathXmlApplicationVersion(String xmlPath) {
this.xmlPath = xmlPath;
}
public Object getBean(String beanId) throws Exception {
if (StringUtils.isBlank(beanId)) {
throw new RuntimeException("The beanId is null");
}
List<Element> elements = readSpringXml();
if (elements == null || elements.size() == 0) {
throw new RuntimeException("The xml doest have bean define.");
}
for (Element element : elements) {
if (element.getName().equals("bean")) {
String xmlBeanId = element.attributeValue("id");
if (StringUtils.isBlank(xmlBeanId)) {
continue;
}
if (xmlBeanId.equals(beanId)) {
String classPath = element.attributeValue("class");
return initBean(classPath);
}
}
}
return null;
}
public Object initBean(String className) throws Exception {
Class<?> forName = Class.forName(className);
return forName.newInstance();
}
public List<Element> readSpringXml() throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(this.getClass().getClassLoader().getResourceAsStream(xmlPath));
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
return elements;
}
}
UserService接口和实现类就不提供了,自己随便创建一个就行了