当前位置: 首页 > 工具软件 > Component > 使用案例 >

@Component和@Bean的区别

孔茂
2023-12-01

最近学习spring的时候,一直搞不清这两个的区别,网上写的是在太官方了,小白太难了。于是自己整理一下。

首先,相同点,这两者目的都是注册bean到spring中因此都可以通过@Autowried装配,比如:

@Autowired

private Student student;

先看看两者的作用:

@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。

@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑(啥意思下面解释)。

于是区别来了:①我们知道Component,Controller,Service,Repository都是可以起到相同作用的,都是在类上方添加注解,而@Bean是在配置类中使用,也就是加了@Configuration的类里面的方法上面使用

②@Component四兄弟是通过componentscan由spring容器来找到类路径自动装配到容器中@Bean呢是我们通过自定义方法产生的一个产生bean实例的逻辑。常见用法:人家的源码我们没法改,所以没办法在源码的类上加@Component。于是,我们可以通过方法上加@Bean注解,把第三方的类放入容器,比如把jbdc里的connection对象放入容器里:

@Bean
public Connection getConnection(){
  try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    return DriverManager.getConnection("jdbc:mysql:///mysql", "root", "root");
   } catch (Exception exception) {
    return null;
   }
}

③@Bean方法里面如果跟参数,这个参数是会根据括号里的对象类型从容器里面找这个对象。

 @Bean(name = "connection")
    public Connection getConnection(StudentService studentService){
        System.out.println(studentService);
        studentService.findStudentById(1);

 类似资料: