|
|
1
6
您可以编写一个小型加载程序来创建 new, custom classloader . 然后可以使用这个类加载器加载应用程序类。 在自定义类加载器中,当应用程序试图访问要列入黑名单的类时,可以抛出ClassNotFoundException。 您需要重载load()方法。此方法将负责在您的黑名单类上引发异常,或者在允许类的情况下将异常删除到父类加载器。示例实现:
(当然,真正的实现可能比这复杂得多) 因为应用程序的类是通过这个类加载器加载的,并且您只在需要时将loadClass()调用委托给父类加载器,所以您可以将需要的任何类列入黑名单。
|
|
|
2
1
在测试程序时,难道您不希望出现编译错误而不是运行时错误吗?您可以将IDE或编译器配置为在实例化不需要的类时发出警告。我知道AspectJ有一些很好的特性:您可以在连接点上定义编译警告/错误,并在Eclipse中获得反馈。要在Eclipse中使用它,只需安装AspectJ插件并编写一个合适的方面。要在从命令行或脚本编译时获得错误,实际上必须使用AspectJ编译器,但我怀疑您是否需要它。 |
|
|
3
0
http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html 没有提到类的创建/加载,所以我相信您不能使用策略强制执行它。 无论如何,为什么要在加载异常类时抛出异常?也许你可以解释你的问题,然后有人可能会提出解决方案。
防止加载某些类的一种方法是从JRE安装中删除它们。大多数系统类都包含在JDK/JRE安装的rt.jar中。您应该能够使用任何ZIP工具修改它。 只需创建一个特殊的JRE安装,并修改它的rt.jar。这是一个丑陋的黑客,但应该可以测试的目的。。。 |