相关推荐recommended
【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
作者:mmseoamin日期:2024-04-01

文章目录

  • 🍔Bean的获取
  • 🎄注入IOC容器对象
    • ⭐代码实现
      • 🛸根据bean的名称获取
      • 🛸根据bean的类型获取
      • 🛸根据bean的名称和类型获取
      • 🎄Bean的作用域
        • ⭐代码实现
          • 🎈注意
          • 🎄第三方Bean
            • ⭐代码实现
              • 🌺在启动类上进行配置(不建议)
              • 🌺使用配置类进行配置
              • 🍔总结

                【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第1张

                代码脚手架我上传到网盘里面了,有需要的同学请自取

                我用夸克网盘分享了「springboot-web-config2.zip」,点击链接即可保存。 链接:https://pan.quark.cn/s/f3872e6654cf

                🍔Bean的获取

                在Spring框架中,Bean是指由Spring容器管理的对象。Spring容器可以通过不同的方式获取Bean,常用的方法有以下几种:

                • 通过名称获取Bean:可以使用getBean方法通过Bean名称获取Bean。例如:MyBean myBean = (MyBean) context.getBean(“myBean”);
                • 通过类型获取Bean:可以使用getBean方法通过Bean类型获取Bean。例如:MyBean myBean = context.getBean(MyBean.class);
                • 通过名称和类型同时获取Bean:如果存在多个符合条件的Bean,可以使用带有名称和类型参数的getBean方法来获取Bean。例如:MyBean myBean = context.getBean(“myBean”, MyBean.class);

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),请添加图片描述,第2张

                  需要注意的是,Bean只有在Spring容器初始化时才会被创建,因此在获取Bean之前,必须确保Spring容器已经初始化完成。通常,在Web应用程序中,可以在Servlet容器启动时初始化Spring容器,以便在应用程序中随时获取Bean。

                  🎄注入IOC容器对象

                  在Spring框架中,Bean是由IOC容器来管理和创建的。因此,在获取Bean对象之前,需要先创建IOC容器对象,确保容器已经初始化完成,并且Bean已经被创建并添加到容器中。

                  具体来说,IOC容器是Spring框架的核心组件之一,它负责维护Bean的生命周期、依赖注入、AOP等功能。Spring框架提供了多种类型的IOC容器,包括BeanFactory、ApplicationContext等,每种容器都有不同的特点和使用方式。

                  通过创建IOC容器对象,可以让Spring框架自动扫描指定的配置文件或注解,并根据配置信息创建Bean对象。这些Bean对象可以通过IOC容器来管理,包括获取Bean实例、销毁Bean实例、依赖注入等。因此,在获取Bean对象之前,需要先创建IOC容器对象,确保容器已经初始化完成,并且Bean已经被创建并添加到容器中。

                  另外,通过IOC容器来获取Bean对象的好处在于,可以将Bean的创建和管理交给Spring框架来处理,减少了程序员的工作量,并提高了程序的可维护性和可扩展性。同时,IOC容器还能够管理Bean之间的依赖关系,实现松耦合的编程模式,提高了程序的灵活性和可测试性。

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第3张

                  ⭐代码实现

                  🛸根据bean的名称获取

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第4张

                  DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
                          System.out.println(bean1);
                  

                  🛸根据bean的类型获取

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第5张

                  DeptController bean2 = applicationContext.getBean(DeptController.class);
                          System.out.println(bean2);
                  

                  🛸根据bean的名称和类型获取

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第6张

                  DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
                          System.out.println(bean3);
                  

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第7张

                  @SpringBootTest
                  class SpringbootWebConfig2ApplicationTests {
                      @Autowired
                      private ApplicationContext applicationContext;
                      //获取bean对象
                      @Test
                      public void testGetBean() {
                          //根据bean的名称获取
                          DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
                          System.out.println(bean1);
                          //根据bean的类型获取
                          DeptController bean2 = applicationContext.getBean(DeptController.class);
                          System.out.println(bean2);
                          //根据bean的名称 及 类型获取
                          DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
                          System.out.println(bean3);
                      }
                  }
                  

                  我们运行一下

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第8张

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第9张

                  🎄Bean的作用域

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),请添加图片描述,第10张

                  配置Bean的作用域需要加上下面这个注解

                  @Scope

                  ⭐代码实现

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第11张

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第12张

                  运行后发现

                  【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第13张

                  我们调用10次getBean方法,得到了10个bean对象

                  🎈注意

                  • 默认singleton的bean,在容器启动的时候被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)
                  • prototype的bean,每一次使用该bean的时候都会创建一个新的实例
                  • 实际开发中,大多数Bean的单例的,也就是说大部分bean不需要配置scope属性

                    🎄第三方Bean

                    第三方 Bean 是指在软件开发中,由外部库或框架提供的可被集成到应用程序中的组件或对象。

                    在传统的 Java 开发中,通常使用 Spring Framework 进行应用程序的开发。Spring Framework 提供了一个 IoC(Inversion of Control)容器,负责管理应用程序中的对象(也称为 Bean)。开发者可以通过配置文件或注解的方式定义和注册自己的 Bean,然后由 Spring 容器进行实例化和管理。

                    除了自己定义的 Bean,还可以引入第三方库或框架提供的 Bean。这些第三方 Bean 可以是数据库连接池、消息队列、缓存库等各种组件。通过将这些第三方 Bean 集成到应用程序中,开发者可以直接使用这些功能强大的组件,而不需要从零开始编写相关的代码。

                    以 Spring Framework 为例,开发者可以通过 Maven 或 Gradle 等构建工具将第三方库的依赖添加到项目中,然后在 Spring 的配置文件或注解中声明并配置第三方 Bean。Spring 容器会负责实例化和管理这些第三方 Bean,使开发者能够轻松地在应用程序中使用它们。

                    总而言之,第三方 Bean 是指由外部库或框架提供的可被集成到应用程序中的组件或对象,通过集成这些第三方 Bean,开发者可以提高开发效率,复用优秀的功能组件。

                    ⭐代码实现

                    🌺在启动类上进行配置(不建议)

                    我们在启动类上声明第三方bean

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第14张

                    加上@Bean后,会将当前方法的返回值对象交给IOC容器管理

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第15张

                    🌺使用配置类进行配置

                    这样子,spring容器在启动的时候,会自动调用声明为bean的方法,然后把方法的返回值声明为spring容器里面的bean对象注入到ioc容器中

                    下面我们创建一个配置类

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第16张

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第17张

                    运行成功

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第18张

                    🍔总结

                    在项目中,我们自定义一个类,如果我们想把这个类交给ioc容器管理,加上@Component衍生注解即可

                    如果这个类不是我们自己自定义的,是我们引入第三方依赖中的,而且我们还想把这个类交给ioc容器管理,那么我们应该定义一个方法,在这个方法上加上@Bean

                    在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

                    【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean),在这里插入图片描述,第19张