【Java Spring】SpringBoot 五大类注解

文章目录

    • Spring Boot 注解简介
    • 1、五大类注解的作用
    • 2、五大类注解的关系
    • 3、通过注解获取对象
    • 4、获取Bean对象名规则解析

Spring Boot 注解简介

Spring Boot的核心就是注解。Spring Boot通过各种组合注解,极大地简化了Spring项目的搭建和开发。五大类注解是Spring Boot注解中的关键,接下来就给大家做详细的介绍。
使用注解的优势:
1.采用纯java代码,不在需要配置繁杂的xml文件
2.在配置中也可享受面向对象带来的好处
3.类型安全对重构可以提供良好的支持
4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能

1、五大类注解的作用

想要将对象存储到Spring当中,有两种注解类型可以实现

1、五大类注解:@Controller、@Service、@Repository、@Component、@Configuration(控制器,服务,存储,组建,配置)

2、方法注解:@Bean(下节介绍)

  • @Controller(控制器):归属业务逻辑层,用来控制用户行为,用来检查用户参数的有效性,前端的请求合理性负责

  • @Service(服务):归属服务层,调用持久化类实现相应的功能,对前端请求的合理性负责【不直接和数据库交互的,类似于控制中心】

  • @Repository(仓库):归属持久层,是直接和数据库进行交互的,通常每一个表都会对应一个仓库类,对数据库的某一个表负责(@Repository)

  • @Configuration(配置):归属配置层,是用来配置当前项目的信息的,项目全局配置负责

  • @Component(组件):归属于公共工具类,提供某些公共的方法

2、五大类注解的关系

首先查看一下Controller的定义,首先在IDEA中敲一个@Controller,使用Command + 左键查看定义

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

可以发现@Controller注解继承了@Component注解,查看其他非@Component的剩下三大类注解,发现它们都继承了@Component注解,所以我们可以认为@Component注解是其他四大类注解的父类
在这里插入图片描述

3、通过注解获取对象

1、使用注解向spring注入ArticleController

package com.demo.componect;
import org.springframework.stereotype.Controller;

@Controller
public class ArticleController {
    public String sayHello() {
        return "Hello Article Controller";
    }
}

2、获取ArticleController对象

public class App {
    public static void main(String[] args) {
      	// 	获取上下文
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
      	// 从Spring汇总获取Bean对象
        ArticleController articleController = context.getBean("articleController", ArticleController.class);
        System.out.println(articleController.sayHello());
    }
}

规则:获取注解注入对象的名称需要将类名第一个字母小写

问题

  • 一、如果类名首字母小写,如何从Spring中会去Bean?和首字母大写一样,直接将类名首字母小写来获取对象

  • 二、如果首字母和第二个字母都是大写,会怎么样? 当使用默认规则,首字母小写获取Bean对象,失败! 使用原类名获取Bean对象 成功!

  • 三、项目中没有目录,全部写在java根目录下? spring-config.xml base-package = "**" 通配符匹配

结论:当使用5大类注解时,默认情况下获取Bean对象,只需要将类名首字母小写即可。当然Bean对象首字母和第二个字母都是大写时,此时需要原类名才能正确的获取到Bean对象

4、获取Bean对象名规则解析

Spring获取Bean对象的规则是如何实现的,我们需要通过阅读Spring源码进行理解

1、shift + shift 全局搜索

2、搜索BeanName进行筛选,查看找到AnnotationBeanNameGenerator(注解 Bean 名称生成)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、使用Structure查看类方法,找到公有函数generateBeanName,然后一层层的查找

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、找到最终结果decapitalize()函数

若名称为空字符串或Null则直接返回,若名称大于两个字符,并且第二个字母大写,第一个字母也大写则直接返回名称,否则将名称的第一个字符小写后返回

public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
  			// 首字母和次字母大写,则返回原名称
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
  			// 首字母小写返回
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/194514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…

vue2使用ts vue-class-component

目前,对于Vue3来说,TypeScript的支持已经相当成熟,但公司的老项目一直处于迭代和维护无法从v2重构成v3,并且重构的成本也是很大的一个问题,所以记录一下vue2如何去搭配TypeScript。 目录 一、脚手架创建项目 二、vu…

【AUTOSAR-DoIP】通过 DoIP 进行符合 Autosar 的车辆诊断

前言 通信协议 DoIP(互联网协议诊断)可通过以太网、WLAN 和移动通信对系统进行灵活而强大的诊断:无论是车间外的诊断还是车载诊断,以及驾驶时的远程访问。 DoIP 可以通过多种方式使用:现代车辆中的电子控制系统高度互连并执行各种复杂的功能。 Autosar 支持的通信协议 Do…

vue3中shallowReactive与shallowRef

shallowReactive与shallowRef shallowReactive: 只处理了对象内最外层属性的响应式(也就是浅响应式) shallowRef: 只处理了value的响应式, 不进行对象的reactive处理 总结: reactive与ref实现的是深度响应式, 而shallowReactive与shallowRef是浅响应式。 什么时候用浅响应…

08 木谷博客系统RBAC权限设计

这节内容说一下木谷博客系统的权限设计,采用现在主流的权限模型RBAC,对应关系如下: 以上5张表都在mugu_auth_server这个库中 该部分的服务单独定义在user-boot这个模块中。 将角色、权限对应关系加载到Redis 木谷博客系统在认证中心颁发令牌的时候是将用户的角色保存到令牌…

SpringBoot整合Sharding-Jdbc实现分库分表和分布式全局id

SpringBoot整合Sharding-Jdbc Sharding-Jdbc sharding-jdbc是客户端代理的数据库中间件;它和MyCat最大的不同是sharding-jdbc支持库内分表。 整合 数据库环境 在两台不同的主机上分别都创建了sharding_order数据库,库中都有t_order_1和t_order_2两张…

linux查看emmc分区信息(10种方法 )

目录 ## 1 emmc ## 2 uboot查看 ## 3 kernel查看 方法1 方法2 方法3 方法4 方法5 方法6 方法7 方法8 方法9 方法10 ## 1 emmc 我们要说的是,User Data Partition中的再分区 可简化为 ## 2 uboot查看 u-boot> mmc partPartition Map for MMC device…

windows dockerdesktop 安装sqlserver2022

1.下载windows dockertop软件 下载连接 2.安装完成配置,下载源地址 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": …

深度学习及其基本原理

深度学习的 Ups and Downs概念区分神经网络的构成深度学习基本原理深度学习的普遍近似定理扩展:反卷积网络——可视化每一层提取的特征 深度学习的 Ups and Downs 1958:感知机(线性模型)1969:感知机有局限性1980s&…

Chrome网页前端组件调试模式,获取核心业务逻辑

进入网页,点击F12,弹出开发者工具对话框,如下图 定位目标组件,如按钮,修改html,插入οnclick"debugger"代码 在网页点击该按钮,触发调试模式 不停按F11,逐个检索文件…

shell编程系列- bash和sh的区别

文章目录 引言bash和sh的区别CentOS下的区别Ubuntu下的区别 最佳实践 引言 我们在编写shell脚本时,通常第一行都要声明当前脚本的执行程序,也就是常见的 #!/bin/sh 或者是 #!/bin/bash ,我们无论用哪一个脚本似乎都可以正常的执行&#xff0…

★数据库建表优化

1、冷热分离: 一个表里最好不要存在即有常修改的数据又有不常修改的数据,一个好的做法是,把常修改更新的字段当做热表单独建表,同理不经常修改更新的字段当做冷表单独建表。 2、控制B树的高度: 也就是控制一个表存储的…

每天五分钟计算机视觉:LeNet是最早用于数字识别的卷积神经网络

LeNet 假设你有一张 32321 的图片,然后使用 6 个 55的过滤器,步幅为 1,padding 为 0,输出结果为 28286。图像尺寸从 3232 缩小到 2828。 然后进行池化操作,使用平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个14146 的图像。…

P23 C++字符串

目录 前言 01 什么是字符串 02 字符串是怎么工作的呢? 2.1 字符 2.2 字符串 2.3 如何知道指向hello world的这个指针多大 03 使用字符串 04 字符串传参 前言 本期我们将讨论 C 中的字符串。 首先,什么是字符串? 01 什么是字符串 字…

Batch Norm简明图解【批归一化】

Batch Norm(批归一化) 是现代深度学习实践者工具包的重要组成部分。 在批归一化论文中引入它后不久,它就被认为在创建可以更快训练的更深层次神经网络方面具有变革性。 Batch Norm 是一种神经网络层,现在在许多架构中普遍使用。 …

Electronica慕尼黑电子展 Samtec团队与21ic分享虎家产品与方案

【摘要/前言】 “希望但凡是能够使用到连接器的场合都有Samtec的身影” 在慕尼黑上海电子展现场,Samtec华东区销售经理章桢彦先生在与21ic副主编刘岩轩老师的采访中,如是说道。这是一种愿景,更是Samtec的努力方向。短短一句话,…

WebSocket协议在java中的使用

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

aspera传输方案怎么样,需要选择aspera替代方案吗

Aspera传输方案是一种高速、可靠的文件传输解决方案,适用于需要大规模传输大文件或数据集的企业和组织。Aspera采用UDP协议及自己开发的FASP协议进行加速传输,能够在高延迟、高丢包网络环境下实现稳定快速的传输。 Aspera传输方案具有以下优点&#xff1…

ArcGIS10.x系列 Python工具箱教程

ArcGIS10.x系列 Python工具箱教程 目录 1.前提 2.需要了解的资料 3.Python工具箱制作教程 4. Python工具箱具体样例代码(DEM流域分析-河网等级矢量化) 1.前提 如果你想自己写Python工具箱,那么假定你已经会ArcPy,如果只是自己…

ESP32-Web-Server编程- JS 基础5

ESP32-Web-Server编程- JS 基础5 概述 JS 编程内容颇多,我们提供一些简单的示例,先玩再学,边玩边学。 示例1-演示通过 JS 进行温度转换 资源链接 对应示例的 code 链接 (点击直达代码仓库) 示例2-增加网页弹窗 演…