关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
8年前关闭。
Improve this question
Class
是使用 Java 反射 API 的起点。我们可以用:
Class.forName("classname")
获取
Class
描述符,然后初始化一个对象,调用方法等。这是框架使用反射的方式吗?例如,JUnit、Spring、Structs 2 等。
最佳答案
是的。
例如,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
,以及不同类型的 Listeners 类。例如,你会有<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 格式。
关于java - 框架中如何使用反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817425/