Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类构造函数arg导致异常_Java_Eclipse_Spring_Tomcat - Fatal编程技术网

Java 类构造函数arg导致异常

Java 类构造函数arg导致异常,java,eclipse,spring,tomcat,Java,Eclipse,Spring,Tomcat,我正在尝试创建一个将类作为构造函数参数的bean: public class DummyDao<T> { private final Class<T> entityClass; public DummyDao(final Class<T> entityClass) { this.entityClass = entityClass; } public void doSomething() { S

我正在尝试创建一个将类作为构造函数参数的bean:

public class DummyDao<T> {
    private final Class<T> entityClass;

    public DummyDao(final Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    public void doSomething() {
        System.out.println("My class is " + entityClass);
    }
}
我的Spring配置中有以下内容:

<bean id="dummyDao" class="com.example.dao.DummyDao">
    <constructor-arg>
        <value type="java.lang.Class" >com.example.dao.SampleDto.class</value>
    </constructor-arg>
</bean>
一旦应用程序运行,找到com.example.dao.SampleDto.class或将其传递给DummyDao的构造函数就没有问题了——我可以用Java代码来完成这项工作——因此我只能断定问题是由Spring初始化期间活动的类装入器引起的。从堆栈跟踪可以清楚地看出,这是一个Tomcat加载程序

但是,如果我创建一个普通的老bean,其中有一个DummyDao作为字段,那么没有问题:

public class Consumer {
    private DummyDao<SampleDto> dummyDao = new DummyDao<SampleDto>(SampleDto.class);

    public Consumer() {
        System.out.println("**Consumer constructor: dummyDao=" + dummyDao);
    }
}

<bean id="consumer" class="com.example.dao.Consumer" />
公共类消费者{
私有的DummyDao DummyDao=新的DummyDao(SampleDto.class);
公众消费者(){
System.out.println(“**使用者构造函数:dummyDao=“+dummyDao”);
}
}
消息“**使用者构造函数:dummyDao=com.example.dao。DummyDao@23dd246“将显示在日志中


有人能建议解决这个问题吗?

Spring没有使用类文本,因此您可以使用

<value type="java.lang.Class" >com.example.dao.SampleDto</value>
com.example.dao.SampleDto

谢谢,这就解决了问题。我应该意识到:如果我使用Class.forName(),我就不会包括“.Class”。
public class Consumer {
    private DummyDao<SampleDto> dummyDao = new DummyDao<SampleDto>(SampleDto.class);

    public Consumer() {
        System.out.println("**Consumer constructor: dummyDao=" + dummyDao);
    }
}

<bean id="consumer" class="com.example.dao.Consumer" />
<value type="java.lang.Class" >com.example.dao.SampleDto</value>