java - 框架中如何使用反射?

标签 java reflection

关闭。这个问题需要更多 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/

相关文章:

java - APPIUM ANDROID 混合应用程序 : Not able to get driver context as 'WEBVIEW' when navigating to the web view from native in Hybrid app

java - java中的每个对象都有自己的构造函数吗?

java - 在 Servlet Filter 内部调用容器的 session 对象,而不是 GemFire 的 session 对象

java - JAVA中同一个Field通过反射得到的总是同一个对象吗?

Java:无法通过反射访问注释

java - 如何从数据库添加图像到 ListView 中?

java - 如何为@CachePut定义多个键?

c# - 您将如何发出类型的默认值?

java - 检查 Field[] 是否包含名称为 XXX 的字段

java - 将 Scala Any 转换为 Java 对象