@Component 和 @Bean 是兩種使用註解來定義bean的方式。java
@Component(和@Service和@Repository)用於自動檢測和使用類路徑掃描自動配置bean。註釋類和bean之間存在隱式的一對一映射(即每一個類一個bean)。spring
這種方法對須要進行邏輯處理的控制很是有限,由於它純粹是聲明性的。this
@Bean用於顯式聲明單個bean,而不是讓Spring像上面那樣自動執行它。它將bean的聲明與類定義分離,並容許您精確地建立和配置bean。.net
@Component public class Student { private String name = "lkm"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
而@Bean則常和@Configuration註解搭配使用code
@Configuration public class WebSocketConfig { @Bean public Student student(){ return new Student(); } }
均可以使用@Autowired或者@Resource註解注入component
@Autowired Student student;
若是想將第三方的類變成組件,你又沒有沒有源代碼,也就沒辦法使用@Component進行自動配置,這種時候使用@Bean就比較合適了。不過一樣的也能夠經過xml方式來定義。xml
另外@Bean註解的方法返回值是對象,能夠在方法中爲對象設置屬性。對象
另外你們能夠了解一下Spring的Starter機制,就是經過@Bean註解來定義bean。blog
能夠搭配@ConditionalOnMissingBean註解 @ConditionalOnMissingClass註解,若是本項目中沒有定義該類型的bean則會生效。get
避免在某個項目中定義或者經過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