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. 命令查看linux主机配置

    查看cpu: # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cp ...

  2. perl _DATA_ 文件句柄

    常用的perl 读写文件的操作,我们都很熟悉了,需要先声明1个文件句柄.但是看下面这段代码: my %organisms = (); while(<DATA>){ chomp; if(/^ ...

  3. [CNN] Tool - Deep Visualization

    From: http://www.infoq.com/cn/news/2016/12/depth-neural-network-fake-photos 当时大部分的DNN在识别图像中对象的过程中主要依 ...

  4. [AWS] Deploy react project on EC2

    如何在aws部署项目 申请到亚马逊AWS免费账户后,我们可以拥有很多的免费云服务产品项目,其中包括: EC2云服务器. Amazon S3存储. Amazon RDS数据库. Amazon Cloud ...

  5. Http Referer的一些总结

    以前对Http中Referer的认识不够透彻.最近理了理,记录一下. 1 Referer可以记录访问的来源,统计访问量,可以用来防盗链. 2 客户端用js不能篡改Referer,用一些插件什么的可以达 ...

  6. libuv示例代码

    https://github.com/nikhilm/uvbook/tree/master/code

  7. NHibernate中Session的处理 线程不安全

    NHibernate中Session是线程不安全的,而且每次数据库操作 请求创建Session时对性能有些影响.在Windows应用中可以通过 [ThreadStatic]特性很简单的就可以实现线程安 ...

  8. Spring学习笔记--代理

    静态代理 1.静态代理的角色分析(UML画图推荐使用StarUML软件) 抽象角色---一般使用接口或者抽象类来实现. 真实角色---被代理的角色. 代理角色---代理真实角色—代理真是角色后一般会做 ...

  9. rest_framework框架

    rest_framework框架的认识 它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架. 一  路由 可以通过路由as_view()传参 根据请求方式的不同执行对应不同的方法 ...

  10. vscode 的 vue模板

    12 { "Print to console": { "prefix": "vue", "body": [ " ...