条件: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();

完成

maven解析xml+测试test+注解的更多相关文章

  1. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  2. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  3. DOM生成XML文档与解析XML文档(JUNIT测试)

    package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...

  4. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  6. Jaxb解析xml准换为javabean

    先说下这个的背景吧,前些日子,有个以前的小同事说刚接触webservice,想解析下xml,记得我学的时候还是dom4j,sax的解析方式,最近看别人的代码用的jaxb的方式,觉得注解起来很简练,所以 ...

  7. webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml

    1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...

  8. dom解析xml随笔

    1.dom解析jar包准备: dom解析需用到dom4j的jar包,比如我在项目中用到的的是dom4j-1.6.1jar,因为项目用的是MAVEN,所以可直接到maven中央库去搜索相关pom坐标配置 ...

  9. (转)Maven pom.xml 配置详解

    背景:maven一直感觉既熟悉又陌生,归根结底还是自己不太熟. 1 什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者 ...

随机推荐

  1. my.赚钱

    http://mhxy.gamedog.cn/201503/999433.html   (发表于 2015-03-19) 梦幻西游手游四种赚钱技巧翻身做土豪教程,在游戏中玩家需要知道的就是赚钱方法是非 ...

  2. c++11 多线程 1

    第3章 线程间共享数据 本章主要内容 共享数据带来的问题 使用互斥量保护数据 数据保护的替代方案 保护共享数据结构的最基本的方式,是使用C++标准库提供的互斥量(mutex). 清单3.1 使用互斥量 ...

  3. TCP/IP协议<一>

    下面是协议层从底层至顶层的一个模型图: 一.计算机网络的背景 1.1 计算机的发展 有人说:“20世纪最伟大的发明就是计算机”,自诞生伊始,计算机经历了一系列发展,从大型通用计算机.超级计算机.小型机 ...

  4. python3 FTP简单实现文件下载(含中文乱码问题)

    from ftplib import FTP def ftp_down(HOST,romatepath,filename,localpath): user=***** password=***** f ...

  5. elastic search语句

    基本匹配: { "query":{ "match":{ "title" : "quick" } } } ES语法结构: ...

  6. 打开/关闭网卡无线WIFI模块

    @echo off title ------(Please run as Administrators)Please select------ :begin echo ---------------- ...

  7. Spring Boot实战(3) Spring高级话题

    1. Spring Aware Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的.即你可以将你的容器替换成别的容器. 实际项目中,不可避免地会用到Spring容 ...

  8. DB2去重复的几种方法

    DB2去重的几种方法 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 例如下表:tabl ...

  9. linux下常用命令备忘

    转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删 ...

  10. Props 和 IActorRef 3

    在Actor模式中我们使用IActorRef通过ActorSystem来发送消息数据.这么做有两个理由 1.ActorSystem会在消息中封装一些元数据(metadata),这些数据我们可以通过上下 ...