我上一些课A
:
public class A {
public A(String str) {
System.out.println("Create A instance: " + str);
}
public void methodA() {
System.out.println("#methodA1()");
}
}
而我的类加载器实现:
public class MyClassLoader extends ClassLoader {
public MyClassLoader() {
super();
}
@Override
public synchronized Class<?> loadClass(String name)
throws ClassNotFoundException {
System.out.println("Load: " + name);
return super.loadClass(name);
}
}
现在,我尝试更改当前线程中的默认类加载器:
import java.util.ArrayList;
import java.util.List;
public class ChangeLoaderTest {
public static void main(String[] args) {
// Save class loader so that we can restore later.
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
MyClassLoader newLoader = new MyClassLoader();
try {
// Set new classloader.
Thread.currentThread().setContextClassLoader(newLoader);
// My class.
A a = new A("1");
a.methodA();
// Standard Java class.
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(3);
} finally {
// Restore.
Thread.currentThread().setContextClassLoader(oldLoader);
}
}
}
并ChangeLoaderTest
输出:
Create A instance: 1
#methodA1()
没有人
Load: ...
为什么?我怎样才能ClassLoader
变成某个线程?
正如Marko
Topolnik指出的那样,上下文类加载器供框架使用。要自己使用类加载器,您必须先调用loadClass("somepackage.A")
,然后使用反射API创建A(Class.newInstance()
)的新实例。
您将无法直接在源代码中使用A或其方法,因为调用代码不知道A-它使用不同的类加载器。可以由常规类加载器加载的A的接口或基类可用于避免反射。
interface AIF{
void someMethod();
}
class A implements AIF{
public void someMethod(){}
}
public void test(){
MyLoader loader = new MyLoader();
Class cla = loader.loadClass("A");
AIF a = (AIF) cla.newInstance();
a.someMethod();
}
我目前正在尝试将类加载到我的应用程序中,这样我就可以过滤掉那些不包含任何test/-方法的类。我希望以后在我的应用程序中运行这些测试。 到目前为止,一切都很好-除了我正在使用的(或者可能是任何)似乎没有实际重新加载位于我的应用程序类路径上的类。 更准确地说,我的应用程序的用户首先选择一些源文件。然后将它们复制到临时位置,并将许多正则表达式匹配/替换对应用于原始源文件的副本。接下来,拷贝被编译,然后
这个问题可能已经得到了回答,我读过很多类似的,但对我不起作用。因此,我的具有扩展的自定义表模型。我的数据是和列名。那么,当我的数据发生更改时,如何更新表呢?我一直在使用,它正在工作,但它将我的自定义单元格呈现器重置为默认值。谢了。
我有一个表视图,每次都很好地填充, 我的主控制器: 我的测试类: 扩展测试类并覆盖其运行的Test1类: 我的aHandler: 因为tbl1绑定到Handler。getInstance()。GetData(),第一次初始化该类时,我看到列Test填充了值1,因为TestData=1;但当计时器开始更改测试数据时,表视图不会获得新的赋值。我做错了什么? 我尽我所能解释这个问题,请让我知道,如果它仍
我们在webapp中使用liquibase 3.0.8已经有一段时间了,数据库更新是由Spring-liquibase bean在应用程序启动时应用的。我们决定从3.1、3.1.1、3.2.0到3.2.3,逐步更新我们的开发数据库,此时更新失败,出现校验和验证错误。我们尝试恢复到3.2.0,但得到了一组不同的校验和错误。我还尝试从3.0.8直接转到3.4.1(编写时的当前版本),并得到相同的校验和
问题内容: 我是java的新手,我被困在这里…我要做的是将一个java文件中arraylist的更改更新为另一个文件中的JPanel。我正在对arraylist进行排序,因此无法手动完成。有什么办法可以让我“告诉” JPanel痛楚吗? 我有进行排序(工作)的BubbleSort.java,有包含JPanel和JFrame类(用于显示未排序的直方图的工作)的Animation.java。 这是家庭
问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正
问题内容: 我正在尝试编写一些搜索输入,以使用ngResource从数据库中获取数据。 数据在页面上显示为ng-repeat,但是当我执行搜索并且$ scope已更新时,该视图未更新并显示旧数据。 这是代码: main.html(活动视图) main.js searchbar.js 当它启动时,它从数据库中获取所有数据并正确显示它们,当我尝试进行搜索时,$ scope.eventi会更新(我可以从
问题内容: 我是Postgresql的新手,正在使用9.3版。我有一张桌子,里面有几行。我的问题是,当我更新一行时,该行号被更改并将其移动到表中的最后一个位置。我的问题是:这是否是默认行为,因为我认为在更新行时,不应将其从其位置移开?该操作似乎就像先删除然后再插入该行。 这是示例SQL: 从今起: 将ID为1的更新后的行移动到最后一个位置。 谢谢 问题答案: 行号已更改 关系表中没有“行号”之类的