2013-05-29 56 views
0

我想一個bean注入到一個自定義的HttpMessageConverter其在配置類註冊:注入豆成Spring框架的一個HttpMessageConverter 3.1

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
  • implements BeanFactoryAware in MyMessageConverter

這兩種方法都不起作用。用於轉換HTTP消息的對象MyMessageConverter始終以MyMessageConverter#serviceDao中存儲的null引用結束。

Google和Spring Framework 3.1文檔都沒有提供關於該問題的信息。

@Bob Flannigon:這絕對不是問題。 CompleteConfiguration#myMessageConverter()返回一個正確配置的消息轉換器。然而,當我從MyMessageConverter刪除零參數的構造,春天拋出以下異常:

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>() 

我想這意味着春天創建一個新的實例,然後將其用,而不是我配置的bean。

+0

在XML配置中,bean的順序可能很重要,我不確定這是否適用於基於對象的配置,但我預計底層機制是相同的。您是否嘗試過將消息轉換器上方的serviceDAO定義移動? –

+0

看到編輯,響應時間有點長。 – frececroka

+0

我不明白。你的'CompleteConfiguration'就像你當前的問題一樣,沒問題,應該使用'serviceDao()'''ServiceDao''創建一個'MyMessageConverter'。 –

回答

0

從Spring Framework 3.1.0升級到Spring Framework 3.2.3後,行爲消失。

也許這只是一個錯誤。