首页 > 其他分享 >SpringBoot原理学习

SpringBoot原理学习

时间:2023-12-31 11:00:13浏览次数:28  
标签:依赖 Resource SpringBoot Autowired mySQLDbServiceImpl 学习 原理 属性 注入

一、IoC/DI相关

1. 如何进行依赖注入?

①依赖注入的三种方式

Ⅰ. 属性注入

    /**
     * Field 注入/属性注入
     * */
//    @Resource(name = "mySQLDbServiceImpl")
//
    @Autowired
    @Qualifier(value = "mySQLDbServiceImpl")
    private DbService dbService;

@Autowired、@Resource均支持,使用简单代码简洁,是最常用的一种依赖注入方式;

 

 Ⅱ. setter注入

    /**
     * setter注入
     * */
    private DbService dbService;

//    @Resource(name = "mySQLDbServiceImpl")

    @Autowired
    @Qualifier(value = "mySQLDbServiceImpl")
    public void setDbService(DbService dbService) {
        this.dbService = dbService;
    }

 @Autowired、@Resource均支持,缺点是setter方法可能会被多次调用,注入对象有被修改的风险,很少使用;

 

 Ⅲ. 构造器注入

    /**
     * 构造器注入
     * */
    private final DbService mySQLDbServiceImpl;

    public DbController(DbService mySQLDbServiceImpl) {
        this.mySQLDbServiceImpl = mySQLDbServiceImpl;
    }

@Autowired支持,@Resource不支持,不过实际上不需要@Autowired也可以完成,如上面的代码;

构造器注入方式可以注入final修饰的对象(前两种注入方式都不可以),可以确保注入对象不会被修改,

而且因为构造器方法在类加载阶段就会执行,所以依赖对象在使用前就会被初始化,可以确保需要的依赖不为空;

 

构造器注入是Spring官方推荐的依赖注入方式,配合lombok的@RequiredArgsConstructor使用可以省去手写构造器的步骤,代码也非常简洁;

 (注意:对于有多个实现类的接口,构造器注入是根据属性名来区分的,相当于byName,所以不要乱起属性名)

 

 

 ②@Autowired和@Resourece的区别

Ⅰ. @Autowired来自Spring框架,@Resource来自JDK;

Ⅱ. @Autowired支持属性、setter方法和构造器注入,@Resource只支持属性、setter方法;

Ⅲ. @Autowired默认采用byName的方式查找依赖,@Resource默认采用byType的方式查找依赖;

Ⅳ. 对于有多个实现类的接口的依赖注入,@Autowired可以通过@Qualifier注解的value属性来指定名称,@Resource可以通过其name属性来指定名称;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

标签:依赖,Resource,SpringBoot,Autowired,mySQLDbServiceImpl,学习,原理,属性,注入
From: https://www.cnblogs.com/AvavaAva/p/17937297

相关文章

  • 2023-2024-1 20231412 《计算机基础与程序设计》第14周学习总结
    2023-2024-120231412《计算机基础与程序设计》第14周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13011这个作业的目标《C......
  • 评价机器学习模型的思路
    这个标题不够严谨,不同业务领域下的模型,没有可比性。因此,应当增加一定的限定条件,才能对机器学习的模型进行比较。当前可行的限定条件,如下:模型模型结构参数的数量训练算法训练时长数据训练数据集验证数据集数据质量基础平台训练平台硬件软件运行平台硬......
  • 深度学习笔记
     一:深度学习常见的应用场景深度学习在许多领域都有广泛的应用,以下是一些深度学习的常见应用场景:计算机视觉:深度学习在图像分类、目标检测、人脸识别、图像生成和图像分割等计算机视觉任务中表现出色。它可以帮助识别和理解图像中的内容,从而应用于自动驾驶、视频监控、医学影像......
  • 2023-2024-1 20231405《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231405《计算机基础与程序设计》第十四周学习总结作业信息作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009作业的目标自......
  • 2023-2024 20231302《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业这个作业的目标自学教材《C语言程序设计》第13章并完成云班课测试作业正文https://www.cnblogs.com/9q2z2z/p/17937248教材......
  • 算法学习Day18左下角的值,路径总和,构建二叉树
    #Day18左下角的值,路径总和,构建二叉树`ByHQWQF2023/12/30`##笔记***##513.找树左下角的值给定一个二叉树的**根节点**`root`,请找出该二叉树的 **最底层 最左边**节点的值。假设二叉树中至少有一个节点。**示例2:****输入:**\[1,2,3,4,null,5,6,null,null,7]**......
  • 2023-2024-1 20231320 《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231320《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十四周作业)这个作业的目标<自学《C语言程序......
  • openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅
    openGauss学习笔记-179openGauss数据库运维-逻辑复制-发布订阅发布和订阅基于逻辑复制实现,其中有一个或者更多订阅者订阅一个发布者节点上的一个或者更多发布。订阅者从它们所订阅的发布拉取数据。发布者上的更改会被实时发送给订阅者。订阅者以与发布者相同的顺序应用那些数据......
  • openGauss学习笔记-180 openGauss 数据库运维-升级-升级前必读
    openGauss学习笔记-180openGauss数据库运维-升级-升级前必读180.1升级方案本节为指导用户选择升级方式。用户根据openGauss提供的新特性和数据库现状,确定是否对现有系统进行升级。当前支持的升级模式为就地升级、灰度升级和滚动升级。升级方式的策略又分为大版本升级和小版......
  • 2023-2024-1 学号:20231305 《计算机基础与程序设计》第十四周学习总结
    2023-2024-1学号:20231305《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第一周作业)这个作业的目标<自学教材......