我一直在尝试检测 getconnection 方法以获取在 JDBC 连接建立期间传递的 DB_URL。据我所知,DriverManager 的检测工作正常,因为注入(inject)部分工作正常而不会引发任何异常。但是当涉及到执行该行时,在我的例子中调用我定义的包中类的 public static void 方法,它说
Exception in thread "main" java.lang.NoClassDefFoundError: testInjection/TestClass
at java.sql.DriverManager.getConnection(DriverManager.java:206)
at testInstrumentation.TestConnector.main(TestConnector.java:30)
但同样的注入(inject)对其他类来说效果很好。小帮助将不胜感激。
这就是我在检测期间注入(inject)的内容。
method.insertAt(1, true, "testInjection.TestClass.setConnetionURL($1);");
最佳答案
您向系统类加载器加载的 java.sql.DriverManager
类添加了一个方法调用。引导类加载器看不到由它作为父级的系统类加载器加载的任何类。
要解决此问题,您需要将 testInjection.TestClass
添加到引导类加载器。您可以通过设置命令行值 -Xbootclasspath
来引用带有此类的 jar 文件,或者通过使用代理的 Instrumentation
实例以编程方式执行此操作。
关于java - JDBC DriverManager 无法访问不同包中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732317/