maven解析xml+测试test+注解
条件: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();
完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下