条件:maven项目
测试图:
创建maven项目,在maven项目中scr目录下有main、test(没有就创建)
一、解析XML文件方式
在main目录下有java、resources、webapp(没有就创建)
在java目录下创建源代码
Apple类
packagecom.wbg.entity;public classApple {public voiddesc(){
System.out.println("我是苹果");
}
}
View Code
Shop接口
packagecom.wbg.ioc;public interfaceShop {
Object getBen(String name);
}
View Code
BeanShop接口
packagecom.wbg.ioc;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importjavax.xml.transform.sax.SAXResult;importjava.net.URL;importjava.util.List;public class BeanShop implementsShop{publicBeanShop(String configXML){//创建SAXReader对象
SAXReader saxReader=newSAXReader();//获取XML文件路径
URL url= this.getClass().getClassLoader().getResource(configXML);try{//生成文档对应实体
Document document=saxReader.read(url);
List 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();
}
}
@OverridepublicObject getBen(String name) {return null;
}
}
在resources目录下创建xml文件
xml文件
View Code
在test文件下创建java目录,进行刷新下
在pom文件下加入dom4j包
org.dom4j
dom4j
2.1.1
进行添加测试
创建成功
进行测试
@Testpublic voidgetBen() {
BeanShop beanShop=new BeanShop("fruit.xml");
}
成功
二、使用注解方式
首先在pom文件中加入reflections
org.reflections
reflections
0.9.10
在annot包中创建一个注释
packagecom.wbg.annot;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)public @interfaceFruit {
String value()default "";int count() default 0;
}
View Code
在ioc中创建BeanAnnoShop类继承Shop接口
BeanAnnoShop类
packagecom.wbg.ioc;importcom.wbg.annot.Fruit;importorg.reflections.Reflections;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public class BeanAnnoShop implementsShop{private static Map map=new HashMap<>();publicBeanAnnoShop(){
Reflections reflections=new Reflections("com.wbg");
Set> 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();
}
}
}
@OverridepublicObject getBen(String name) {returnmap.get(name);
}
}
View Code
进行添加测试类
添加成功,输入测试
BeanAnnoShop beanAnnoShop=newBeanAnnoShop();
Apple apple= (Apple) beanAnnoShop.getBen("apple");
apple.desc();
完成