我正在尝试将bean注入到在配置类中注册的自定义HttpMessageConverter
:
package my.package.config;
import ...
@Configuration
@ComponentScan( basePackages = "my.package" )
public class CompleteConfiguration extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters( List<HttpMessageConverter<?>> converters ) {
converters.add( this.myMessageConverter() );
this.addDefaultHttpMessageConverters( converters );
}
@Bean
public MyMessageConverter myMessageConverter() {
MyMessageConverter mc = new MyMessageConverter();
mc.setServiceDao( this.serviceDao() );
return mc;
}
@Bean
public ServiceDao serviceDao() {
return ...;
}
}
自定义HttpMessageConverter定义如下:
package my.package.converter;
public class MyMessageConverter implements HttpMessageConverter<Person> {
private ServiceDao serviceDao;
...
implementation which uses ServiceDao
...
public void setServiceDao( ServiceDao s ) {
this.serviceDao = s;
}
public ServiceDao getServiceDao() {
return this.serviceDao;
}
}
这不能按预期工作,因为Spring在内部创建了MyMessageConverter
的新实例,而没有为这个新实例设置ServiceDao
。
我试过
MyMessageConverter#setServiceDao( ServiceDao s )
注释@Autowired
。BeanFactoryAware
中实施MyMessageConverter
。这两种方法都不起作用。用于转换HTTP消息的MyMessageConverter
对象始终最终存储在null
中的MyMessageConverter#serviceDao
引用。
谷歌和Spring Framework 3.1文档都没有提供有关该问题的信息。
@Bob Flannigon:这绝对不是问题。 CompleteConfiguration#myMessageConverter()
返回一个正确的cofigured消息转换器。但是,当我从MyMessageConverter
中删除zero-args构造函数时,Spring会抛出以下异常:
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [my.package.converter.MyMessageConverter]: No default constructor found; nested exception is java.lang.NoSuchMethodException: my.package.converter.MyMessageConverter.<init>()
我想这意味着Spring会创建一个新实例,然后使用它代替我配置的bean。
答案 0 :(得分:0)
从Spring Framework 3.1.0升级到Spring Framework 3.2.3后,行为消失了。
也许这只是一个错误。