@Component 和 @Bean 的區別


1、兩者的聯系和區別

@Component@Bean 是兩種使用注解來定義bean的方式。

@Component(和@Service@Repository)用於自動檢測和使用類路徑掃描自動配置bean。注釋類和bean之間存在隱式的一對一映射(即每個類一個bean)。

這種方法對需要進行邏輯處理的控制非常有限,因為它純粹是聲明性的。


@Bean用於顯式聲明單個bean,而不是讓Spring像上面那樣自動執行它。它將bean的聲明與類定義分離,並允許您精確地創建和配置bean。

@Component

public class Student {
 
    private String name = "lkm";
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

@Bean則常和@Configuration注解搭配使用

@Configuration
public class WebSocketConfig {
    @Bean
    public Student student(){
        return new Student();
    }
 
}

都可以使用@Autowired或者@Resource注解注入。

 

2、為什么有了@Compent,還需要@Bean呢?

如果想將第三方的類變成組件,你又沒有沒有源代碼,也就沒辦法使用@Component進行自動配置,這種時候使用@Bean就比較合適了。不過同樣的也可以通過xml方式來定義。

另外@Bean注解的方法返回值是對象,可以在方法中為對象設置屬性。

另外大家可以了解一下Spring的Starter機制,就是通過@Bean注解來定義bean。

可以搭配@ConditionalOnMissingBean注解 @ConditionalOnMissingClass注解,如果本項目中沒有定義該類型的bean則會生效。

避免在某個項目中定義或者通過congfig注解來聲明大量重復的bean。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM