根据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; /** * 数据 ...
随机推荐
- JVM 内部原理(七)— Java 字节码基础之二
JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...
- 解决pymongo里操作IOSDate类型的问题
pymongo是Python对MongoDB的操作库.但是由于python没有IOSDate类型,所以对Mongo的时间类型是个很麻烦的操作.整理一个把python能识别的date类型转化为IOSDa ...
- Tomcat 全攻略
转自:http://www.ibm.com/developerworks/cn/java/l-tomcat/ 简介 tomcat 是 jakarta 项目中的一个重要的子项目,其被 JavaWorld ...
- Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务
一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2 应用服务和数据服务拆分 特点:App.DB.Fi ...
- js实现选中文字 分享功能
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
Java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 在使用JSONObject.toBe ...
- IOC容器特性注入第三篇:Attribute封装
Attribute(特性)=>就是对类,方法,字段的自定义属性的基类.可以利用Attribute对类,方法等进行自定义描述,方便区分. 既然如此,那我们就可以那些需要注入IOC容器和不需要注入I ...
- Html 助手
/*! * Html 助手 * version: 1.0.0-2018.07.25 * Requires ES6 * Copyright (c) 2018 Tiac * http://www.cnbl ...
- [原]openstack-kilo--issue(二十一) instance can't get ip 虚拟机不能得到ip(2)
===问题点==== 在使用vlan模式部署compute节点的时候出现了下面的错误:在controller节点的dhcp-agent.log中 2017-01-22 20:19:34.178 241 ...
- java保存动态代理生成的类的class文件
启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true