详解【SpringBoot】Bean管理(Bean扫描,Bean注册第三方bean对象,Bean注册条件)

Bean 扫描

在 Springboot 进行 Bean 扫描的时候,之所以能扫描到 controller、service……就是因为在启动类中有下面这个注解
image.png
这个注解是一个组合注解,包含着@ComponentScan 注解
image.png
@ComponentScan 并没有指明要扫描的包路径。这个注解,如果没有指明要扫描的包路径,默认是扫描添加了该注解的类所在的包及其子包。
在这里,@ComponentScan注解在启动类中,默认只扫描启动类所在的包及其子包

如果要扫描其他的包,以下面为例:
image.png
可以在启动类加上@ComponentScan 并指明扫描的位置,就可以扫描指定的包及其子包

Bean 注册第三方 bean

image.png
如果要注册的 bean 对象来自第三方(不是自定义的),是无法用@Component 及衍生注解声明 bean 的
Spring 提供了@Bean 和@Import 两种解决方式

使用@Bean

@Bean

@Bean注解在Spring框架中非常常见,它用于告诉Spring:“这个方法的返回值应该被注册为一个Bean,并且可以被其他Bean引用”。

使用方法:
  1. 在配置类(通常带有@Configuration注解的类)中定义一个方法。
  2. 在这个方法上使用@Bean注解。
  3. 当Spring容器启动时,它会调用这个方法,并将返回值注册为一个Bean。
类比理解:

想象你是一家公司的HR,你正在招聘一个产品经理。你需要在招聘网站(Spring容器)上发布一个职位(Bean),并告诉其他部门的同事:“我这里有一个产品经理的职位空缺,你们有需要可以来找我”。

代码示例:
@Configuration
public class MyAppConfig {

    @Bean
    public ProductManager productManager() {
        return new ProductManager();
    }
}

在这个例子中,MyAppConfig是一个配置类,productManager()方法返回一个ProductManager对象,并通过@Bean注解告诉Spring:“这个方法返回的对象应该被注册为一个Bean”。

@Import

@Import注解用于快速导入其他配置类,使得这些配置类中的Bean也可以被Spring容器管理。

使用方法:
  1. 在配置类(或任何Spring管理的类)上使用@Import注解。
  2. 指定要导入的配置类的类名。
类比理解:

还是回到公司的例子。假设你是一家大型公司的HR,你负责招聘多个职位。为了分工明确,你可能将招聘不同职位的任务分配给不同的HR。现在,你需要告诉公司其他部门的同事:“我这里有HR1、HR2和HR3,他们分别负责招聘不同的职位,你们可以直接找他们”。

代码示例:
@Configuration
@Import({HR1Config.class, HR2Config.class, HR3Config.class})
public class HRDepartmentConfig {
    // ...
}

在这个例子中,HRDepartmentConfig是一个配置类,它使用@Import注解导入了HR1ConfigHR2ConfigHR3Config这三个配置类。这意味着这三个配置类中定义的Bean也会被Spring容器管理。

总结

  • @Bean用于在配置类中定义并注册单个Bean。
  • @Import用于快速导入其他配置类,使得这些配置类中的Bean也可以被Spring容器管理。

这两个注解都是Spring框架中非常重要的特性,它们使得Bean的定义和注册变得更加灵活和方便。通过类比生活中的例子,我们可以更好地理解它们的用途和工作原理。

注册条件

image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01红C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值