【Spring篇】Spring IoC & DI

2024-04-10 1951阅读

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【Spring系列】

本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌

【Spring篇】Spring IoC & DI

目录

  • 前言
  • 一、IoC
  • 二、Bean的存储
    • @Controller(控制器存储)
    • @Service(服务存储)
    • @Repository(仓库存储)
    • @Component(组件存储)
    • @Configuration
    • 类注解之间的关系
    • @Bean方法注解
      • @Bean参数的传递
      • 三、扫描路径
      • 四、Spring DI
        • 属性注入
        • 构造方法注入
        • Setter方法注入

          前言

          我们知道Java是一个面向对象的语言,既然是面向对象的话就必须得有对象,无论我们使用哪种框架或者组件前提是必须得有对象,而Spring IoC就是帮助我们创建和管理对象的(可以把Spring IoC当成一个创建和管理对象的容器)。

          Spring IoC是Spring全家桶中各个模块的基础,创建对象的容器。

          AOP是以IoC为基础,AOP是面向切面编程。

          什么是面向切面编程:。

          在传统的面向对象编程中,我们通过将功能分散到对象的方法中来实现系统的各种需求。但是,随着系统的复杂性增加,这种方式可能导致代码的重复和混乱,特别是在处理横切关注点(cross-cutting concerns)时,如日志记录、事务管理、安全性等。

          AOP的出现就是为了解决这些横切关注点的问题。它允许开发者通过将横切关注点从业务逻辑中分离出来,然后在需要的地方进行统一的管理和应用。在AOP中,这些横切关注点被称为切面(Aspect),它们是与业务逻辑独立的模块,可以在不修改源代码的情况下,通过横切方式将它们应用到系统中。(可以将AOP理解为抽象的面向编程)

          一、IoC

          IoC,控制反转(Inversion of Control),即将创建对象的控制权进行反转。通常情况下,我们是手动进行对象的创建的,而Spring IoC可以使得开发者不再需要创建对象,而是由IoC容器根据需求自动创建项目所需要的对象。

          Spring容器管理的主要是对象,这些对象,我们称之为"Bean".我们把这些对象交由Spring管理,由

          Spring来负责对象的创建和销毁.我们程序只需要告诉Spring,哪些需要存,以及如何从Spring中取出对象(所以Spring IoC最主要的两个功能是存取对象)。

          二、Bean的存储

          IoC(Inversion of Control)是一种设计模式,用于实现控制反转,其中对象的创建和管理被转移到了容器(如Spring框架)中。在Spring框架中,对象的管理通常通过依赖注入(Dependency Injection)来实现。

          常见的依赖注入方式有两种:分别是类注解和方法注解。

          • 类注解:@Controller、@Service、@Repository、@Component、@Configuration。
          • 方法注解:@Bean。

            @Controller(控制器存储)

            使⽤@Controller存储bean对象的代码如下所⽰:

            【Spring篇】Spring IoC & DI

            【Spring篇】Spring IoC & DI

            • ApplicationContext context取到Spring上下文,之后就可以取到所Spring管理的对象,然后执行对象中的doController方法。

              @Service(服务存储)

              使⽤@Service存储bean对象的代码如下所⽰:

              【Spring篇】Spring IoC & DI

              • 通过类型获取对象:

                【Spring篇】Spring IoC & DI

              • 通过名称获取对象(需要强制类型转换):

                【Spring篇】Spring IoC & DI

              • 通过名称和类型获取bean:

                【Spring篇】Spring IoC & DI

                运行结果如下:

                【Spring篇】Spring IoC & DI

                @Repository(仓库存储)

                使⽤@Repository存储bean对象的代码如下所⽰:

                【Spring篇】Spring IoC & DI

                【Spring篇】Spring IoC & DI

                运行结果如下:

                【Spring篇】Spring IoC & DI

                【Spring篇】Spring IoC & DI

                @Component(组件存储)

                使⽤@Component存储bean对象的代码如下所⽰:

                【Spring篇】Spring IoC & DI

                【Spring篇】Spring IoC & DI

                运行结果如下:

                【Spring篇】Spring IoC & DI

                @Configuration

                使⽤@Configuration存储bean对象的代码如下所⽰:

                【Spring篇】Spring IoC & DI

                【Spring篇】Spring IoC & DI

                运行结果如下:

                【Spring篇】Spring IoC & DI

                类注解之间的关系

                程序的应用分层,调用如下:

                【Spring篇】Spring IoC & DI

                @Controller、@Service、@Repository、@Configuration注解都是@Component注解的衍生类。

                Spring MVC架构中的三层结构:控制层(Controller)、服务层(Service)和持久层(Repository/DAO):

                • 控制层(Controller)负责接收和处理HTTP请求,并将处理结果返回给客户端。通常使用@Controller或@RestController注解标识。
                • 服务层(Service)负责应用程序的业务逻辑处理,包括数据处理、算法实现等。服务层通常使用@Service注解标识。
                • 持久层(Repository/DAO)负责与数据库进行交互,执行数据的持久化操作。通常使用@Repository注解标识DAO接口的实现类。

                  在这种架构下,控制层中的方法可以调用服务层中的方法,而服务层中的方法可以调用持久层中的方法,从而实现了业务逻辑的分层和解耦。

                  @Bean方法注解

                  @Bean注解使用:

                  • 使用@Bean注解的时候,Bean的名称是方法名(即首字母大写,如果前两个字母是小写的话那么Bean的名称就是类名)。
                  • @Bean注解必须搭配其它五大注解来使用。(即方法注解@Bean 要配合类注解才能将对象正常的存储到Spring容器中)
                  • 当一个对象类型存在多个Bean时,就不能通过类型来获取Bean了,此时应该通过名称或者方法+名称的方式来获取Bean(如下举例)。
                  • 【Spring篇】Spring IoC & DI

                    【Spring篇】Spring IoC & DI

                    【Spring篇】Spring IoC & DI

                    运行结果如下:

                    【Spring篇】Spring IoC & DI

                    @Bean参数的传递

                    Bean参数的传递演示如下:

                    【Spring篇】Spring IoC & DI

                    【Spring篇】Spring IoC & DI

                    运行结果如下:

                    【Spring篇】Spring IoC & DI

                    三、扫描路径

                    SpringBoot的一大特点:约定大于配置。此特点的其中一个体现就是扫描路径。

                    启动类默认扫描路径是启动类所在的路径及其子孙目录。

                    如下图(将启动类放到controller目录下面,那么启动类扫描的范围就是controller目录及其controller所有的子孙目录):

                    【Spring篇】Spring IoC & DI

                    启动类这样放置的话运行就会报错。

                    【Spring篇】Spring IoC & DI

                    如果非要把启动类放到controller目录下的话,要配置扫描路径,让Spring扫描到这些注解也就是通过@ComponentScan来配置扫描路径。

                    【Spring篇】Spring IoC & DI

                    再次运行就会成功了:

                    【Spring篇】Spring IoC & DI

                    虽然通过@ComponentScan来配置扫描路径,但是不推荐这样做,推荐做法是把启动类放在我们希望扫描的包的路径下,这样我们定义的bean就都可以被扫描到。

                    【Spring篇】Spring IoC & DI

                    四、Spring DI

                    DI即依赖注入的意思,有的地方叫做对象注入、属性装配,这里需要根据上下文去进行理解。

                    依赖注入是一个过程,是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源,而资源指的就是对象。简单来说,就是把对象取出来放到某个类的属性中。

                    关于依赖注入,Spring为我们提供了三种方式:

                    • 属性注入
                    • 构造方法注入
                    • Setter注入

                      下面我们上这三种方式一一进行举例。

                      属性注入

                      属性注⼊是使⽤@Autowired实现的,比如将Service类注⼊到Controller类中。

                      【Spring篇】Spring IoC & DI

                      【Spring篇】Spring IoC & DI

                      运行结果如下:

                      【Spring篇】Spring IoC & DI

                      属性注入以类型进行匹配,与注入的属性名称无关。当一个类型存在多个对象时,优先进行名称匹配,但是如果连名称都匹配不上的话就会报错。

                      构造方法注入

                      构造方法注入是在类的构造⽅法中实现注入。

                      【Spring篇】Spring IoC & DI

                      运行结果如下:

                      【Spring篇】Spring IoC & DI

                      当存在多个构造函数时,需要加@AutoWired注明使用哪个构造函数;如果只存在一个构造函数的话,则@AutoWired可以省略。

                      【Spring篇】Spring IoC & DI

                      【Spring篇】Spring IoC & DI

                      Setter方法注入

                      【Spring篇】Spring IoC & DI

                      运行结果如下:

                      【Spring篇】Spring IoC & DI

                      好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!

                      【Spring篇】Spring IoC & DI

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]