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