@bean和@component的理解

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();
}

}容器

相關文章
相關標籤/搜索