@Bean與@Component的聯系與區別


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注解注入

@Autowired
Student student;

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

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

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

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

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

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

參考文章

https://stackoverflow.com/questions/10604298/spring-component-versus-bean#

https://blog.csdn.net/qq_38534144/article/details/82414201

https://blog.csdn.net/chenpengjia006/article/details/81481986

原文鏈接:https://blog.csdn.net/w605283073/article/details/89221522


免責聲明!

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



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