2016-02-19 92 views
1

任何人都可以告訴我,這兩個春季啓動應用程序類是否有區別(春季豆注入和尊重單身條件或任何其他春季啓動魔術方面)?春季引導豆注入豆注入方法

@Bean 
@Scope("singleton") 
public UserService userService(Foo foo){ 
    return new UserService(foo); 
} 

@Bean 
@Scope("singleton") 
public Foo foo(){ 
    return new Foo(); 
} 

,並呼籲userService(不宣佈方法參數)而是通過直接的方法調用將其注入到富()

@Bean 
@Scope("singleton") 
public UserService userService(){ 
    return new UserService(foo()); 
} 

@Bean 
@Scope("singleton") 
public Foo foo(){ 
    return new Foo(); 
} 

回答

1

不,沒有沒有不同。有人可能會認爲,每當您在該配置類中調用foo()時,就會得到一個新的bean實例,但Spring在這種情況下的工作方式是,它爲該配置類創建一個代理,該代理攔截所有方法調用。代理然後檢查是否已經有一個類型爲Foo的bean,如果是,則返回現有的實例,否則該方法調用委託給實現並創建一個新的bean。

代碼風格明智,但是,我認爲在您的第一個例子中,對Foo bean的依賴關係比第二個示例更清晰。

+0

謝謝。我同意第一種風格清楚地標記,但是我們總是使用第二種風格,因爲它允許我們在intellij中按住CTRL鍵點擊以快速瀏覽到foo()注入器...從而快速遍歷依賴注入樹。 –