根据xml配置使用反射动态生成对象
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配置使用反射动态生成对象的更多相关文章
- Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...
- C++ 动态生成对象
1.啰嗦一下 说起C++,很多人都觉着难学,其实我也是这么觉着的,在这个移动端火到爆的时代,我都想改行了,移动端做东西那都是现有的第三方库,拿来就可以用,而且稳定性好,开发速度快,而且最关键的是出东西 ...
- .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
.net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ...
- python-根据字符串动态生成对象eval
# -*- coding: utf-8 -*- stock1={ 'stockName':"沈阳机床", ", 'averagePrice_yesterday':34.0 ...
- cglib根据数据动态生成对象
最近有个任务:根据查询SQL直接导出报表 实现关键是,怎么根据sql查询的数据动态生成对象列表,想到Cglib动态代理实现 废话少说,上代码: 定义动态生成Java Bean类: import jav ...
- 利用runtime动态生成对象?
利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...
- WPF 动态生成对象属性 (dynamic)
原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...
- 反射的妙用:C#通过反射动态生成类型继承接口并实现
起因 最近想自己鼓捣个RPC,想着简化RPC调用方式,直接申明接口,然后根据接口的属性去配置RPC调用的相关信息.有一种说法叫申明式调用. 简单来说就是,申明一个interface,动态继承并实例化, ...
- 06 Mybatis 使用xml配置映射模式+动态SQL---使用案例
1.项目结构 2.数据库表User对应的实体类 package domain; import java.io.Serializable; import java.util.Date; /** * 数据 ...
随机推荐
- oracle转mysq遇到的问题--------1.nextval问题
oralce里面有一个问题,在做采购单模块时,遇到如下问题: 所以我们要解决这个问题: 第一步: 并发生成方式: sequence的并发生成方式同非并发生成方式都需要建立sequence表,如下: 一 ...
- [Bayes] Understanding Bayes: Visualization of the Bayes Factor
From: https://alexanderetz.com/2015/08/09/understanding-bayes-visualization-of-bf/ Nearly被贝叶斯因子搞死,找篇 ...
- 《JavaWeb程序开发入门》课后题
第一章 1.请编写一个格式良好的XML文档,要求包含足球队一支,队名为Madrid,球员5人:Ronaldo.Casillas.Ramos.Modric.Benzema:篮球队一支,队名为Lakers ...
- ALTER SEQUENCE 导致 REPLICAT 延时
1.查看OGG线程状态 GGSCI (klcoredb-node1) 46> info all Program Status Group Lag at Chkpt Time Since Chkp ...
- Don't forget to Cherish
Watch the video Cherish time, Cherish memories, Cherish tears, Cherish smiles, Cherish friends, Cher ...
- [原]Jenkins(十三)---jenkins用户权限管理
* 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5337874.html 两种策略的比较
- Workbox 缓存
介绍 https://developers.google.cn/web/tools/workbox/guides/get-started 先注册一个service worker <script& ...
- 不偏移的天地图地图服务-SuperMap版
在<不偏移的天地图地图服务-ArcGIS版>中,提供了相应的服务地址:而SuperMap中,则是将纠偏的方法集成到程序中,只需要修改一个配置参数,则可以实现天地图的纠偏. 打开Web型数据 ...
- vs2017默认以管理员运行
1. 打开VS的安装目录,找到devenv.exe,右键,选择“兼容性疑难解答”. 2. 选择“疑难解答程序” 3. 选择“该程序需要附加权限” 4. 确认用户帐户控制后,点击测试程序,不然这个对话框 ...
- Python3中StringIO
关于调用StringIO模块,python3中需要这样: from io import StringIO 而python2还是 from StringIO import StringIO