反射或运行时类声明?

时间:2013-11-17 20:44:03

标签: java performance reflection

我有一个简单的问题。

我们正在开发一个简单的应用服务器(如),该服务器在运行时接受客户业务而无需重新启动服务器。

当用户实现业务并将其部署到服务器时,服务器只是试图找出存档描述符,并加载模块,它运行良好。

某些操作需要多次反射调用,并且对于每次调用,他们一次又一次地调用。例如,有一个接受任何对象的方法,然后搜索已经通过注释签名的某个字段并与之做生意,所以如果我们用同一个对象调用这个方法1000次,这将反映1000次

我的问题是,它有效吗?我的意思是它不占用CPU?!我正在考虑的唯一可能的解决方案是创建一个类并为每个对象(可能是包装器)编译它,该方法将只找出包装类。但我知道这可能会使系统变得复杂,难以调试。

当前的解决方案正在运行,但我认为做一次1000次的工作有点不合逻辑,即使它简单易行。

先谢谢。

2 个答案:

答案 0 :(得分:0)

使用反射在运行时动态加载类本身并不是一个糟糕的选择。根据您的描述,您应该提供一个可扩展的框架,允许您的客户端进行实现,并基于它来运行他们的业务逻辑,而不是一些隐含的运行时注释魔术。

一个很好的现实世界的例子是The Servlet API

答案 1 :(得分:0)

  例如,有一种接受任何对象的方法,然后搜索   某个领域的女巫已经通过注释签名并做了一些   与它做生意,所以如果我们用同一个方法调用这个方法1000次   对象,这将反映1000次。

在这种情况下,我建议你使用缓存。反射完成后,您将知道类名和字段名称。将它们存储在HashMap中,其中Class类型为密钥,Method为值。 下次调用“方法”时,请先检查缓存。

相关问题