2015-10-03 37 views
0

形式自動裝配工作的跟進to this question爲什麼不把這些在@Configuration

我也嘗試過這一點,但它不具有noargs構造函數(你現在可以通過服務/控制器/組件做到這一點炸燬,那麼爲什麼不能在這裏工作嗎?)

@Configuration 
class MyConfig { 

    @Autowired 
    MyConfig(final ObjectMapper mapper) { 
     ... 
    } 
} 

,但這個工程

@Configuration // or @Service or some bean 
class SomeClass ... { 

    @Autowired 
    private ObjectMapper objectMapper; 

    @PostConstruct 
    private void configureObjectMapper() { 
     objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
    } 

} 

爲什麼不@Configuration工作像其它的管理類?

+0

請告訴我們你如何使用配置。一個mcve。 –

+0

@SotiriosDelimanolis一個什麼?鏈接的問題包含更多的信息.​​.....但它們是@配置,它們是自動加載的,沒有直接的用法。 Spring Rest和Spring MVC使用'ObjectMapper'。 – xenoterracide

+0

OP,請注意您拼錯了註釋名稱。 – chrylis

回答

4

我不承認你的第一個例子,不知道它在哪裏工作。

構造函數注入的第二個例子不能專門用於配置類,因爲Spring在開始構建bean之前分析和解決依賴關係圖有很大的魔力。配置類實際上是代理的,因此它們的@Bean方法可以進行自我調用並仍然獲得單例實例(或任何適當的作用域)。因爲配置類可以提供它自己所依賴的bean,所以Spring需要一個無參數的構造函數,以便它可以一次構建一個實例。

我的首選方法是在我的@Bean方法上使用參數注入,這不需要特殊註釋。

+0

第一種是'setter'注射的一種形式,雖然我沒有設置任何東西。通常當構建一個bean時,spring會調用setter註解@Autowired,它比構造函數注入更具可伸縮性,但不會像域注入那樣破壞封裝。雖然有可能有更多的設定注入比我在做什麼。 – xenoterracide

+0

'@ Bean'唯一​​的問題(雖然)也許我不明白這一點,我只是在這裏配置一個現有的Bean,而不是返回一個。雖然'@ Bean'也許不需要返回任何東西......? – xenoterracide

+0

@ xenoterracide這不是一個二傳手,但。你可能想到的是一些配置器類,它們實現了後處理bean的接口。那些沒有專門的註釋,因爲它們實現了特定的方法。 – chrylis