通过读取配置文件的方式来使用反射完成对实例对象方法的调用

版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明作者和出处。 https://blog.csdn.net/Jsagacity/article/details/80118476

实现的功能如题,通过读取配置文件的方式来使用反射完成对实例对象方法的调用。

废话不多说,直接演示,先准备一个接口:

public interface IMyServlet {

    public void init();

    public void service();

    public void destory();
}

然后再创建一个实现类,实现上面的接口:

public class MyServlet implements IMyServlet{

    @Override
    public void init() {
        System.out.println("MyServlet诞生了……");
    }

    @Override
    public void service() {
        System.out.println("MyServlet开始服务了……");
    }

    @Override
    public void destory() {
        System.out.println("MyServlet销毁了……");
    }

}

添加一下xml解析的jar包,这个网上可以随便下载得到:
这里写图片描述

添加一个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>MyServlet</servlet-name>
        <servlet-class>com.itman.xmldemo.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

</web-app>

一切准备完毕,然后测试使用一下:

//通过读取配置文件的方式来使用反射完成对实例对象方法的调用
public class TestMyServlet {

    @Test
    public void testMyServlet() {
        try {
            // 1.创建解析器对象
            SAXReader saxReader = new SAXReader();
            // 2.使用解析器加载web.xml文件得到document对象
            Document document = saxReader.read("src/com/itman/xmldemo/web.xml");
            // 3.获取根元素节点
            Element rootElement = document.getRootElement();
            // 4.根据元素名称获取子元素节点
            Element servletElement = rootElement.element("servlet");
            // 5.根据元素名称获取servlet-class的文本节点
            String servletClass = servletElement.element("servlet-class")
                    .getText();
            // System.out.println(servletClass);
            // 6.通过类全名获取字节码文件
            Class clazz = Class.forName(servletClass);
            // 7.创建实例对象
            MyServlet my = (MyServlet) clazz.newInstance();
            // 8.调用实例对象里面的方法
            my.init();
            my.service();
            my.destory();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行结果,没毛病:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Jsagacity/article/details/80118476
今日推荐