Spring Beans自動裝配
前麵已經學會如何使用的<bean>元素來聲明bean和注入<bean>,通過使用在XML配置文件<constructor-arg>和<property>元素。
Spring容器可以自動裝配相互協作bean之間的關係,這有助於減少對XML配置,而無需編寫一個大的基於Spring應用程序的較多的<constructor-arg>和<property>元素。
自動裝配模式:
有下列自動裝配模式,可用於指示Spring容器使用自動裝配依賴注入。使用<bean/>元素的autowire屬性為一個bean定義中指定自動裝配模式。
模式 | 描述 |
---|---|
no | This is default setting which means no autowiring and you should use explicit bean reference for wiring. You have nothing to do special for this wiring. This is what you already have seen in Dependency Injection chapter. |
byName | Autowiring by property name. Spring container looks at the properties of the beans on which autowire attribute is set to byName in the XML configuration file. It then tries to match and wire its properties with the beans defined by the same names in the configuration file. |
byType | Autowiring by property datatype. Spring container looks at the properties of the beans on which autowire attribute is set to byType in the XML configuration file. It then tries to match and wire a property if its typematches with exactly one of the beans name in configuration file. If more than one such beans exists, a fatal exception is thrown. |
constructor | Similar to byType, but type applies to constructor arguments. If there is not exactly one bean of the constructor argument type in the container, a fatal error is raised. |
autodetect | Spring first tries to wire using autowire by constructor, if it does not work, Spring tries to autowire by byType. |
可以使用類型和constructor自動裝配模式來連接數組和其他類型化的集合。
自動裝配的局限性:
自動裝配最好效果是它始終在一個項目中使用。如果自動裝配不一般的使用,它可能會被混淆為開發人員可以使用它來連接隻有一個或兩個bean定義。不過,自動裝配可以顯著減少需要指定屬性或構造器參數,但你應該使用它們之前考慮自動裝配的局限性和缺點。
限製 | 描述 |
---|---|
壓倒一切的可能性 | 可以使用<constructor-arg>和<property>設置總是覆蓋自動裝配還指定依賴關係。 |
原始數據類型 | 不能自動裝配所謂的簡單類型包括基本類型,字符串和類。 |
混亂的本質 | 自動裝配比顯式裝配確切的少,所以如果可能的話可以使用顯式的連接。 |