天天看點

【Spring-注解學習】@Component[email protected] 和 @Bean 的差別是什麼?[email protected] 和 @Configuration 的差別是什麼?3.擴充注解:

@Component 通常是通過路徑掃描來自動偵測以及自動裝配到 Spring 容器中(我們可以使用 @ComponentScan 注解定義要掃描的路徑從中找出辨別了需要裝配的類自動裝配到 Spring 的 bean 容器中)。

@Component是一個通用的 Spring 容器管理的單例 bean 元件。

這裡會引申幾個問題。

[email protected] 和 @Bean 的差別是什麼?

  • 作用對象不同:@Component 注解作用于類,而 @Bean 注解作用于方法、
  • @Component 通常是通過路徑掃描來自動偵測以及自動裝配到 Spring 容器中(我們可以使用 @ComponentScan 注解定義要掃描的路徑從中找出辨別了需要裝配的類自動裝配到 Spring 的 bean 容器中)。@Bean 注解通常是我們在标有該注解的方法中定義産生這個 bean,@Bean 告訴了 Spring 這是某個類的執行個體,當我們需要用它的時候還給我。
  • @Bean 注解比 @Component 注解的自定義性更強,而且很多地方我們隻能通過 @Bean 注解來注冊 bean。比如當我們引用第三方庫中的類需要裝配到 Spring 容器時,隻能通過 @Bean 來實作。

@Bean 注解使用示例:

@Configuration
public class ConfigurationDemo {
    @Bean
    public DemoService demoService() {
        return new demoServiceImpl();
    }
}
           

@Component 注解使用示例:

@Component
public class VulnerabilityFileServiceImpl implements VulnerabilityFileService {
..
}
           

當你的一個類被@Component 所注解,那麼就意味着同樣可以用@Repository, @Service, @Controller 來替代它,但是最好還是根據具體功能去使用對應功能注解。

[email protected] 和 @Configuration 的差別是什麼?

  • 調用@Configuration類中的@Bean注解的方法,傳回的是同一個示例;
  • 而調用@Component類中的@Bean注解的方法,傳回的是一個新的執行個體。
  • @Configuration注解本質上還是@Component,是以 < context:component-scan/> 或者 @ComponentScan 都能處理@Configuration注解的類。

3.擴充注解:

  • @Component :通用的注解,可标注任意類為 Spring 的元件。如果一個 Bean 不知道屬于哪個層,可以使用 @Component 注解标注。
  • @Repository :對應持久層即 Dao 層,主要用于資料庫相關操作。
  • @Service :對應服務層,主要設計一些複雜的邏輯,需要用到 Dao 層。
  • @Controller :對應 Spring MVC 控制層,主要用來接受使用者請求并調用 Service 層傳回資料給前端頁面。
  • @Configuration :聲明該類為一個配置類,可以在此類中聲明一個或多個 @Bean 方法。