Spring幫助咱們管理Bean分爲兩個部分,一個是註冊Bean,一個裝配Bean。
完成這兩個動做有三種方式,一種是使用自動配置的方式、一種是使用JavaConfig的方式,一種就是使用XML配置的方式。
在自動配置的方式中,使用@Component去告訴Spring,我是一個bean,你要來管理我,而後使用@AutoWired註解去裝配Bean(所謂裝配,就是管理對象直接的協做關係)。而後在JavaConfig中,@Configuration其實就是告訴spring,spring容器要怎麼配置(怎麼去註冊bean,怎麼去處理bean之間的關係(裝配))。那麼久很好理解了,@Bean的意思就是,我要獲取這個bean的時候,你spring要按照這種方式去幫我獲取到這個bean。到了使用xml的方式,也是如此。君不見<bean>標籤就是告訴spring怎麼獲取這個bean,各類<ref>就是手動的配置bean之間的關係。spring
用@Bean註解的方法:會實例化、配置並初始化一個新的對象,這個對象會由spring IoC 容器管理。code
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
至關於在 XML 文件中配置xml
<beans> <bean id="myService" class="com.acme.services.MyServiceImpl"/> </beans>
生成對象的名字:默認狀況下用@Bean註解的方法名做爲對象的名字。可是能夠用 name屬性定義對象的名字.對象
@Configuration public class AppConfig { @Bean(name = "myFoo") public Foo foo() { return new Foo(); } }
並且還能夠使用name爲對象起多個名字。io
@Configuration public class AppConfig { @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" }) public DataSource dataSource() { // instantiate, configure and return DataSource bean... } }
在 @Component 註解的類中不能定義 類內依賴的@Bean註解的方法。@Configuration能夠。
@Configuration
public class AppConfig {class
@Bean public Foo foo() { return new Foo(bar()); } @Bean public Bar bar() { return new Bar(); }
}容器