條件:maven項目
測試圖:
創建maven項目,在maven項目中scr目錄下有main、test(沒有就創建)
一、解析XML文件方式
在main目錄下有java、resources、webapp(沒有就創建)
在java目錄下創建源代碼
Apple類

package com.wbg.entity; public class Apple { public void desc(){ System.out.println("我是蘋果"); } }
Shop接口

package com.wbg.ioc; public interface Shop { Object getBen(String name); }
BeanShop接口
package com.wbg.ioc; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import javax.xml.transform.sax.SAXResult; import java.net.URL; import java.util.List; public class BeanShop implements Shop{ public BeanShop(String configXML){ //創建SAXReader對象 SAXReader saxReader=new SAXReader(); //獲取XML文件路徑 URL url= this.getClass().getClassLoader().getResource(configXML); try { //生成文檔對應實體 Document document=saxReader.read(url); List<Element> list=document.getRootElement().elements(); for (Element element : list) { String id=element.attributeValue("id"); String clazz=element.attributeValue("class"); System.out.println(id); System.out.println(clazz); } } catch (DocumentException e) { e.printStackTrace(); } } @Override public Object getBen(String name) { return null; } }
在resources目錄下創建xml文件
xml文件

<?xml version="1.0" encoding="UTF-8" ?> <beans> <bean id="apple" class="com.wbg.fruit.Apple"></bean> <bean id="banana" class="com.wbg.fruit.Banana"></bean> <bean id="pear" class="com.wbg.fruit.Pear"></bean> </beans>
在test文件下創建java目錄,進行刷新下
在pom文件下加入dom4j包
<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.1</version> </dependency>
進行添加測試
創建成功
進行測試
@Test public void getBen() { BeanShop beanShop=new BeanShop("fruit.xml"); }
成功
項目下載地址:https://github.com/weibanggang/javaXMLTest
二、使用注解方式
首先在pom文件中加入reflections
<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.10</version> </dependency>
在annot包中創建一個注釋

package com.wbg.annot; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Fruit { String value() default ""; int count() default 0; }
在ioc中創建BeanAnnoShop類繼承Shop接口
BeanAnnoShop類

package com.wbg.ioc; import com.wbg.annot.Fruit; import org.reflections.Reflections; import java.util.HashMap; import java.util.Map; import java.util.Set; public class BeanAnnoShop implements Shop{ private static Map<String,Object> map=new HashMap<>(); public BeanAnnoShop(){ Reflections reflections=new Reflections("com.wbg"); Set<Class<?>> classes=reflections.getTypesAnnotatedWith(Fruit.class); for (Class<?> aClass : classes) { Fruit anot=aClass.getAnnotation(Fruit.class); try { map.put(anot.value(),aClass.newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } @Override public Object getBen(String name) { return map.get(name); } }
進行添加測試類
添加成功,輸入測試
BeanAnnoShop beanAnnoShop=new BeanAnnoShop(); Apple apple= (Apple) beanAnnoShop.getBen("apple"); apple.desc();
完成