Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 Spring:NotWritablePropertyException_Java_Spring_Dependency Injection_Spring Test_Spring Test Mvc - Fatal编程技术网

Java Spring:NotWritablePropertyException

Java Spring:NotWritablePropertyException,java,spring,dependency-injection,spring-test,spring-test-mvc,Java,Spring,Dependency Injection,Spring Test,Spring Test Mvc,应用程序上下文 MockFactoryBean.java 公共类MockFactoryBean实现FactoryBean{ 私人阶级类型; 公共void集合类型(类类型){ this.type=type; } @凌驾 public T getObject()引发异常{ 返回Mockito.mock(type); } @凌驾 公共类getObjectType(){ 返回类型; } @凌驾 公共布尔isSingleton(){ 返回true; } } 例外情况: org.springframewo

应用程序上下文

MockFactoryBean.java

公共类MockFactoryBean实现FactoryBean{
私人阶级类型;
公共void集合类型(类类型){
this.type=type;
}
@凌驾
public T getObject()引发异常{
返回Mockito.mock(type);
}
@凌驾
公共类getObjectType(){
返回类型;
}
@凌驾
公共布尔isSingleton(){
返回true;
}
}
例外情况:

org.springframework.beans.NotWritablePropertyException:无效 bean类的属性“processor” [test.spring.MockFactoryBean]:Bean属性“processor”为 不可写或具有无效的setter方法。参数类型是否正确 setter的返回类型是否与getter的返回类型匹配


当您声明一个
FactoryBean
时,Spring希望您配置
FactoryBean
的属性,而不是它创建的对象的属性

请尝试以下操作:

<bean id="contentRegisteringBean" parent="abstractRegisteringBean" lazy-init="false">
    <!-- Define concrete class to pass to Mockito.mock() -->
    <constructor-arg value = "com.somepackage.ProcessorRegisteringBeanImpl" />

    <property name="processor">
        <bean class="com.somepackage.ContentService$Processor"/>
    </property>
</bean>

<!-- Abstract definition of beans created using Mockito.mock() -->
<bean id="abstractRegisteringBean" abstract = "true"
     class="org.mockito.Mockito" factory-method = "mock">
</bean>


什么是
MockFactoryBean
?@axtavt查看更新的问题,并提供更多解释。为什么?
public class ProcessorRegisteringBeanImpl {
    private Processor mProcessor;


    public Processor getProcessor() {
        return mProcessor;
    }

    public void setProcessor(final Processor processor) {
        mProcessor = processor;
    }
}
public class MockFactoryBean<T> implements FactoryBean<T> {
    private Class<T> type;

    public void setType(Class<T> type) {
        this.type = type;
    }

    @Override
    public T getObject() throws Exception {
        return Mockito.mock(type);
    }

    @Override
    public Class<T> getObjectType() {
        return type;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }

}
<bean id="contentRegisteringBean" parent="abstractRegisteringBean" lazy-init="false">
    <!-- Define concrete class to pass to Mockito.mock() -->
    <constructor-arg value = "com.somepackage.ProcessorRegisteringBeanImpl" />

    <property name="processor">
        <bean class="com.somepackage.ContentService$Processor"/>
    </property>
</bean>

<!-- Abstract definition of beans created using Mockito.mock() -->
<bean id="abstractRegisteringBean" abstract = "true"
     class="org.mockito.Mockito" factory-method = "mock">
</bean>