#java #spring #dependency-injection #spring-test #spring-test-mvc
#java #весна #внедрение зависимостей #spring-тест #spring-test-mvc
Вопрос:
ApplicationContext
<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: недопустимое свойство ‘processor’ класса bean [test.spring.MockFactoryBean]: свойство компонента ‘processor’ недоступно для записи или имеет недопустимый метод установки. Соответствует ли тип параметра средства установки типу возвращаемого средства получения?
Комментарии:
1. Что такое
MockFactoryBean
?2. @axtavt посмотрите на обновленный вопрос, пожалуйста
Ответ №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>
Комментарии:
1. пожалуйста, больше объяснений. Почему?