我有一个简单的问题。
我们正在开发一个简单的应用服务器(如),该服务器在运行时接受客户业务而无需重新启动服务器。
当用户实现业务并将其部署到服务器时,服务器只是试图找出存档描述符,并加载模块,它运行良好。
某些操作需要多次反射调用,并且对于每次调用,他们一次又一次地调用。例如,有一个接受任何对象的方法,然后搜索已经通过注释签名的某个字段并与之做生意,所以如果我们用同一个对象调用这个方法1000次,这将反映1000次
我的问题是,它有效吗?我的意思是它不占用CPU?!我正在考虑的唯一可能的解决方案是创建一个类并为每个对象(可能是包装器)编译它,该方法将只找出包装类。但我知道这可能会使系统变得复杂,难以调试。
当前的解决方案正在运行,但我认为做一次1000次的工作有点不合逻辑,即使它简单易行。
先谢谢。
答案 0 :(得分:0)
使用反射在运行时动态加载类本身并不是一个糟糕的选择。根据您的描述,您应该提供一个可扩展的框架,允许您的客户端进行实现,并基于它来运行他们的业务逻辑,而不是一些隐含的运行时注释魔术。
一个很好的现实世界的例子是The Servlet API。
答案 1 :(得分:0)
例如,有一种接受任何对象的方法,然后搜索 某个领域的女巫已经通过注释签名并做了一些 与它做生意,所以如果我们用同一个方法调用这个方法1000次 对象,这将反映1000次。
在这种情况下,我建议你使用缓存。反射完成后,您将知道类名和字段名称。将它们存储在HashMap
中,其中Class
类型为密钥,Method
为值。
下次调用“方法”时,请先检查缓存。