【问题标题】:Spring: NotWritablePropertyException春天:NotWritablePropertyException
【发布时间】:2014-08-22 02:43:09
【问题描述】:

应用程序上下文

<bean id="contentRegisteringBean" parent="abstractRegisteringBean" lazy-init="false">
    <property name="processor">
        <bean class="com.somepackage.ContentService$Processor"/>
    </property>
</bean>

<bean id="abstractRegisteringBean" class="test.spring.MockFactoryBean">
    <property name="type" value="com.somepackage.ProcessorRegisteringBeanImpl"/>
</bean>

ProcessorRegisteringBeanImpl

public class ProcessorRegisteringBeanImpl {
    private Processor mProcessor;


    public Processor getProcessor() {
        return mProcessor;
    }

    public void setProcessor(final Processor processor) {
        mProcessor = processor;
    }
}

MockFactoryBean.java

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;
    }

}

例外:

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

【问题讨论】:

  • 什么是MockFactoryBean
  • @axtavt 请查看更新的问题

标签: java spring dependency-injection spring-test spring-test-mvc


【解决方案1】:

当您声明 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>

【讨论】:

  • 请多解释。为什么?
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 2011-11-28
  • 2020-10-13
  • 2016-05-25
  • 2013-11-02
  • 2014-03-13
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多