@Component 和 @Bean 的区别

Posted 雷子abc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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注解注入


@Autowired
Student student;

2、为什么有了@Compent,还需要@Bean呢? 

如果想将第三方的类变成组件,你又没有没有源代码,也就没办法使用​​@Component​​​进行自动配置,这种时候使用​​@Bean​​就比较合适了。不过同样的也可以通过xml方式来定义。

另外​​@Bean注解的方法返回值是对象,可以在方法中为对象设置属性。​

另外大家可以了解一下Spring的Starter机制,就是通过​​@Bean注解来定义bean。​

​可以搭配​​​@ConditionalOnMissingBean注解 @ConditionalOnMissingClass注解,​​如果本项目中没有定义该类型的bean则会生效。​

避免在某个项目中定义或者通过congfig注解来声明大量重复的bean。

作者:​​你的雷哥​



以上是关于@Component 和 @Bean 的区别的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot@Component和@Bean的区别

面试题@Component和@Bean的区别

Spring中@Component与@Bean的区别

Spring中@Component和@Bean的区别

@Bean在@Configuration和在@Component中的区别

@Bean在@Configuration和在@Component中的区别