如何在框架中使用反射?

 判官-包公_529 发布于 2023-02-07 17:52

Class是使用Java反射API的起点.我们可以用:

Class.forName("classname")

获取Class描述符然后初始化对象,调用方法等.

这是框架使用反射的方式吗?例如,JUnit,Spring,Structs 2等.

1 个回答
  • 是.

    例如,Spring使用<bean>定义

    <bean id="someId" class="com.foopack.Foo">
        <property name="someField" value="someValue" />
    </bean>
    

    当Spring上下文处理这个<bean>元素时,它将使用Class.forName(String)参数com.foopack.Foo来实例化该类(Class#newInstance()或获取一个Constructor,取决于).然后它将再次使用反射来获取<property>元素的适当setter 并将其值设置为指定的值value.

    Junit还使用反射来获取一组要@Test注释的注释方法.要做到这一点,它需要获取一个Class实例.

    基于Servlet的Web应用程序也使用反射来实例化Servlet,Filter以及不同类型的监听器类.例如,你会有

    <servlet>
        <servlet-name>YourServlet</servlet-name>
        <servlet-class>com.servlets.YourServlet</servlet-class>
    <servlet>
    

    并且容器将获取该完全限定的类名com.servlets.YourServlet,并实例化并注册它.

    JSON解析器/生成器库也使用反射.例如,Gson给定一个类似的

    class Foo {
        private String name = "FOOOO";
    }
    

    和这样的实例

    Foo foo = new Foo();
    

    你会像这样序列化它

    Gson gson = new Gson();
    String json = gson.toJson(foo);
    

    然后Gson将调用getClass()实例foo,获取一组Field实例Class,迭代该集合,并将字段的值序列化为JSON格式.

    2023-02-07 17:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有