Spring框架中@Bean和@Component注解的区别
Spring支持多种类型的注解,例如@Component、@Controller、@Service、@Repository和@Bean。所有这些注解都位于org.springframework.stereotype包下。
当应用程序中的类使用上述任何注解进行注解时,在项目启动期间,Spring会扫描(使用@ComponentScan)每个类并将类的实例注入到IOC容器中。@ComponentScan的另一个作用是运行带有@Bean注解的方法,并将返回的对象作为bean存储到IOC容器中。
序号 | 关键点 | @Bean | @Component |
---|---|---|---|
1 | 自动检测 | 它用于显式声明单个bean,而不是让Spring自动声明。 | 如果任何类使用@Component注解,则它将通过类路径扫描自动检测。 |
2 | Spring容器 | 即使类在Spring容器之外,也可以创建Bean | 如果类在Spring容器之外,则无法创建Bean |
3 | 类/方法级别注解 | 它是方法级别注解 | 它是类级别注解 |
4 | @Configuration | 只有当类也使用@Configuration注解时才有效 | 无需 @Configuration注解 |
5 | 用例 | 如果需要基于动态条件的特定实现,则应使用@Bean。 | 无法基于动态条件编写特定实现 |
@Component示例
@Component public class Pizza{ ........ }
@Bean示例
@Configuration class AppConfiguration{ @Bean public User getUse(){ return new User(); } }
广告