最近学习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);