2011-11-25 185 views
5

在问之前,请明白我的英语不好。是否可以使Class.forName(“”)变得灵活?

我使用一个servlet编程Class.forName(...)类。当我访问servlet时,我从数据库中获得一行详细的控制器信息,指示要使用哪个控制器。

这是Class.forName(...)我编码:

Class c = Class.forName(row.getControllerInfo); 
c.newInstance(); 

这工作得很好,但有一个问题,我使用Eclipse。问题是,当我修改控制器文件时,更改的内容未应用于服务器。

+0

您项目中的一些代码示例可能会帮助我们看到问题 –

+0

只要确保:您不会缓存使用'newInstance()'创建的实例,那么每次调用'newInstance()'的请求都会如此缓存? – home

+0

我使用IntelliJ,当我重命名或移动一个类时,它使我可以选择将其重命名为字符串和文本/ xml /属性文件。也许在eclipse中有类似的选项。 –

回答

0

如果我明白你的问题属实, 当您更改项目的任何文件,则必须部署您的项目到服务器。如果您使用eclipse中的服务器,重新发布可能会解决您的问题。

+0

是的,我部署所有更改的文件,但问题是只有当我使用Class.forName(); – user1065108

0

你试过干净 - 重新构建,然后部署你的应用程序?

2

可能最简单的方法是不支持动态加载。通过支持多个服务器可以更好地实现动态更新。对于开发,您可以通过使用JRebel解决重新部署延迟(可能还有其他问题)。

如果你真的想动态加载类,那么答案是“类加载器”。我建议看看这些,并回来提出任何具体问题。

+0

哇...你是天才thx .... GOOD DAY – user1065108

+0

我发现了另一个有用的程序,它可以帮助“运行时类加载”,请访问这里查看更多信息http://ssw.jku.at/dcevm/ – user1065108