web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5"> <servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>cn.sasa.web01.servlet.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>hiServlet</servlet-name>
<servlet-class>cn.sasa.web01.servlet.Hi</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hiServlet</servlet-name>
<url-pattern>/hi</url-pattern>
</servlet-mapping>
</web-app>

创建一个接口,其实现类实现接口的方法

package cn.sasa.web01.servlet;

public interface IMyServlet {
public void init();
public void service();
public void destory();
}

创建两个实现类Hello、Hi实现IMyServlet接口

package cn.sasa.web01.servlet;

public class Hello implements IMyServlet {

    @Override
public void init() {
System.out.println("hello----init");
} @Override
public void service() {
System.out.println("hello----service");
} @Override
public void destory() {
System.out.println("hello----destory");
} }
package cn.sasa.web01.servlet;

public class Hi implements IMyServlet {

    @Override
public void init() {
System.out.println("hi----init");
} @Override
public void service() {
System.out.println("hi----service");
} @Override
public void destory() {
System.out.println("hi----destory");
} }

测试:

package cn.sasa.web01.servlet;

import java.lang.reflect.Method;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class Test {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
// try {
// Document doc = reader.read("src/cn/sasa/web01/servlet/web.xml");
// Element root = doc.getRootElement();
// Element servElement = root.element("servlet");
// String className = servElement.element("servlet-class").getText();
// //System.out.println(str);
// Class c1 = Class.forName(className);
// hello obj = (hello)c1.newInstance();
// obj.init();
// obj.service();
// obj.destory();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } try {
//获取xml文档对象
Document doc = reader.read("src/cn/sasa/web01/servlet/web.xml");
//获取根节点
Element root = doc.getRootElement();
List<Element> chilNodes = root.elements();
for(Element e : chilNodes) {
if("servlet".equals(e.getName())) {
//获取类全名
String className = e.element("servlet-class").getText();
//反射获取字节文件对象
Class c = Class.forName(className);
//生成对象
Object obj = c.newInstance();
//获取方法
Method init = c.getMethod("init", null);
//运行
init.invoke(obj, null); Method service = c.getMethod("service", null);
service.invoke(obj, null); Method destory = c.getMethod("destory", null);
destory.invoke(obj, null);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

根据xml配置使用反射动态生成对象的更多相关文章

  1. Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)

    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...

  2. C++ 动态生成对象

    1.啰嗦一下 说起C++,很多人都觉着难学,其实我也是这么觉着的,在这个移动端火到爆的时代,我都想改行了,移动端做东西那都是现有的第三方库,拿来就可以用,而且稳定性好,开发速度快,而且最关键的是出东西 ...

  3. .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)

    .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ...

  4. python-根据字符串动态生成对象eval

    # -*- coding: utf-8 -*- stock1={ 'stockName':"沈阳机床", ", 'averagePrice_yesterday':34.0 ...

  5. cglib根据数据动态生成对象

    最近有个任务:根据查询SQL直接导出报表 实现关键是,怎么根据sql查询的数据动态生成对象列表,想到Cglib动态代理实现 废话少说,上代码: 定义动态生成Java Bean类: import jav ...

  6. 利用runtime动态生成对象?

    利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...

  7. WPF 动态生成对象属性 (dynamic)

    原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定  可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...

  8. 反射的妙用:C#通过反射动态生成类型继承接口并实现

    起因 最近想自己鼓捣个RPC,想着简化RPC调用方式,直接申明接口,然后根据接口的属性去配置RPC调用的相关信息.有一种说法叫申明式调用. 简单来说就是,申明一个interface,动态继承并实例化, ...

  9. 06 Mybatis 使用xml配置映射模式+动态SQL---使用案例

    1.项目结构 2.数据库表User对应的实体类 package domain; import java.io.Serializable; import java.util.Date; /** * 数据 ...

随机推荐

  1. hbase源码系列(十五)终结篇&Scan续集-->如何查询出来下一个KeyValue

    这是这个系列的最后一篇了,实在没精力写了,本来还想写一下hbck的,这个东西很常用,当hbase的Meta表出现错误的时候,它能够帮助我们进行修复,无奈看到3000多行的代码时,退却了,原谅我这点自私 ...

  2. android( java) 处理 null 和 预防空指针异常(NullPointerException) 的一些经验。

    概述: 在实际编码中总是会遇到 空指针异常 ,本文总结了一些处理空指针的个人经验. 原则: 尽早的检查,尽早的失败. 比如: 通过intent传参到新的目标 activity,而且一定需要这个参数,那 ...

  3. CefSharp 封装自己的简单H5浏览器 详细配置

    下载了最新的CefSharp源码,发现在自己机器可以运行,到普通的WIN7系统 报了  System.IO.FileNotFoundException: Could not load file or  ...

  4. [sso]搭建CAS单点服务器

    1.下载服务器端文件 Cas Client下载:http://developer.jasig.org/cas-clients/ CAS Server:cas-server-4.0.0-release. ...

  5. postman中 form-data、x-www-form-urlencoded、raw、binary的区别--转

    原文地址:http://blog.csdn.net/ye1992/article/details/49998511 1.form-data:  就是http请求中的multipart/form-dat ...

  6. 使用命令行模式启动VMWare虚拟机

    工作中使用到在centos中安装vmware Workstation部署虚拟机,以前都是使用图形界面启动虚拟机,由此要调整VNC的分辨率大小,重启VNC Server后所有虚拟机都关闭了.事后分析可能 ...

  7. go语言内置基础类型

    1.数值型(Number) 三种:整数型.浮点型和虚数型(有符号整数表示整数范围 -2n-1~2n-1-1:无符号整数表示整数范围 0~2n-1) go内置整型有:uint8, uint16, uin ...

  8. Fiddler 简介

    Fiddler 简介: (1) Fiddler 是一个抓包工具,主要用来对 HTTP 请求进行分析,浏览器按 F12 也可以进行抓包,但是比较轻量,不支持一些复杂的抓包:(2) WireShark 工 ...

  9. php MP3文件下载功能的实现

    方式一:生成文件,返回一个链接,window.href = 链接: 方式二:hearder输出文件流. 先设置流的Content-Type和web服务器的mime类型. mime类型参考 一个head ...

  10. 关于git CRLF LF结尾的问题

    在使用git的过程中,如果我们的项目是跨平台开发的 那么CRLF的处理也许会成为一个很头疼的事情,有可能会出以下的莫名其妙的问题: 我们的某个开发人员在linux上提交的一个文件 当从windows上 ...