2011-05-04 68 views
14

據我瞭解,當使用依賴注入時,所有Bean都在Start上初始化。Spring Standard Bean Injection vs. Autowiring

<bean id="userPreferences" class="com.foo.UserPreferences"> 
    </bean> 
    <!-- a singleton-scoped bean injected to the above bean --> 
    <bean id="userService" class="com.foo.SimpleUserService"> 

     <!-- a reference to the userPreferences bean --> 
     <property name="userPreferences" ref="userPreferences"/> 
    </bean> 

並且上面的配置表示應用程序啓動時創建的userService和userPreferences。這是對的嗎?

當使用自動裝配和使用<context:component-scan>

public class SimpleUserService{ 

@Autowired 
UserPreferences userPreferences; 

//omitted 
} 

1)userPreference上應用init建立?

2)什麼是autowire注入的bean的默認範圍,我們如何改變它?

3)如何影響bean創建和bean注入?

希望我說清楚了。

回答

11

首先,您應該將@Service@Component添加到SimpleUserService類中。

  • 1個是的,在應用intialization創建使用UserPreferences的一個實例
  • 2默認範圍是單,可以用@Scope註解改變它(@see Spring Reference: 3.11.4.4 Specifying bean scope
  • 3組件掃描和XML以同樣的方式(生命週期)的配置工作

也許你應該花一些時間瞭解春節的生命週期。你需要了解的是,Spring的工作方式有些以這種方式(不是100%正確):

  • 首先它創建豆池
  • 然後將其注入的屬性到豆

但它不會以這種方式工作:獲取一個類,查看它需要創建此引用(遞歸)然後創建該類的引用。

如果你明白這一點,那麼你也會明白,bean的@Scope是在bean聲明/類中定義的,而不是在引用中定義的。

4

1)是否在 上創建了userPreference應用程序init?

無論哪種情況,當加載Spring上下文時都會初始化userPreferences。您可以通過將lazy-init="true"添加到bean配置來更改此行爲。

2)什麼是豆 默認範圍由自動裝配注入以及我們如何能夠 改變呢?

什麼是注射的範圍是加載到Spring所有豆類。如果您從另一個項目導入XML配置,它也會包含在內。我不確定你是否可以限制你的範圍。

3)如何影響豆的創造和豆 注入?

無論是自動裝配還是通過XML配置,行爲都應該是相同的。我更喜歡明確定義自動註釋的依賴關係。然後我又喜歡強類型語言。

3

上述配置意味着userService和使用UserPreferences應用程序啓動時創建的。這是對的嗎?

是userPreference上應用init建立?

時哪些bean默認的範圍由自動裝配注入以及我們如何改變呢?

默認範圍始終是 「單身」。可以使用@Scope@Bean或上的scope XML屬性更改此值。

如何影響bean創建和bean注入?

這不是一個明確的問題。如果您更改了Bean作用域,則會在創建它時進行更改(應用程序啓動,每個請求,每個會話等)。接線配置保持不變,只有生命週期發生變化。

1

@autowired表示法是一種過時的方式來表示@inject。後者是JavaEE 6.

stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework-which特徵