【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 = newClassPathXmlApplicationContext("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);}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老师怎样处理校园欺凌

校园欺凌是一个让人痛心又不可忽视的问题。作为老师,该如何处理这种问题,既能够保护受欺凌的学生,又能够让施暴者得到应有的教训呢? 及时发现并介入 经常关注学生的动态,一旦发现有校园欺凌的苗头,就要及时…

pytorch读取tiny-imagenet-200的验证集(val)

ori_train torchvision.datasets.ImageFolder(root args.datadir /tiny-imagenet-200/train/, transformtransform)#可以获取class_idx的映射class_idx ori_train.class_to_idx val_annotations.txt中存储着每个图片对应的类别 获取验证集的标签 test_target []#读取val_…

python项目报错

解决办法:不要用配置的镜像脚本,直接用此命令 pip install pandas -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

Java第二十章多线程

线程简介 在 Java 中,并发机制非常重要。在以往的程序设计中,我们都是一个任务完成后再进行下一个任务,这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制,程序员可以在程序中执行多个线程,每一…

SimpleDateFormat在多线程下的安全问题

目录 情景重现 SimpleDateFormat解析 解决方案 局部变量 加锁 使用线程变量 使用DateTimeFormatter 情景重现 SimpleDateFormat类是Java开发中的一个日期时间的转化类。它可以满足绝大多数的开发场景,但是在高并发下会出现并发问题。接下来查看下文中的案例。…

Python中的datetime库

1. datetime datetime是Python中用于处理日期和时间的类,它包含在datetime模块中。使用datetime类,我们可以创建表示特定日期和时间的对象,以及进行日期和时间的计算和操作。 from datetime import datetime, timedelta# 获取当前日期和时间…

爬虫如何确定HTTP代理IP是否符合自己业务需求?

HTTP代理在许多业务场景中发挥着关键作用,但要确保其能够满足业务需求,需要考虑多个方面的因素。今天我们一起看看,要如何判断HTTP代理是否适合自己的业务,以及在选择HTTP代理时需要考虑的综合因素。 1. 稳定性 稳定性是HTTP代理…

使用Moment.js中获取上周的开始日期和结束日期(可自定义)

前言 有时候需求是这样的,想要获取上周的开始日期和结束日期,或者前几周的时间范围 比如今天是2023.11.28号,我想获取上周的周一到周日,也就是,上周的开始日期: 2023-11-20,上周的结束日期: 2023-11-26 1.…

爬虫系统Docker和Kubernetes部署运维最佳实践

在构建和管理爬虫系统时,使用Docker和Kubernetes可以带来诸多好处,如方便的部署、弹性伸缩和高可靠性。然而,正确的部署和运维实践对于确保系统稳定运行至关重要。在本文中,我将分享爬虫系统在Docker和Kubernetes上的最佳部署和运…

SSM卫生信息管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 卫生信息管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

java设计模式学习之【单例模式】

文章目录 引言单例模式简介定义与用途实现方式:饿汉式懒汉式 UML 使用场景优势与劣势单例模式在spring中的应用饿汉式实现懒汉式实现数据库连接示例代码地址 引言 单例模式是一种常用的设计模式,用于确保在一个程序中一个类只有一个实例,并且…

centos7搭建 PXE 服务安装 window10/11 系统

最近想搭建之前基于 window server 的 window 批量安装,但想想装 window server 真的太麻烦了,我只是为了 PXE 安装系统而已,这些装一个极度消耗资源的系统真是相当麻烦呀,之前装的 server 不维护的话,不是被挖矿盯上就…

The module to import is incompatible with the current project【鸿蒙开发-BUG已解决】

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模块…

基于51单片机冰箱温度控制器设计

**单片机设计介绍, 基于51单片机冰箱温度控制器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机冰箱温度控制器设计是一个非常实用的项目。以下是一个基本的介绍: 系统概述: …

Ubuntu20.04用D435i运行VINS-Fusion时出现“追踪与中断点陷阱”的问题该怎么解决

在使用D435i运行VINS-Fusion时出现了以下画面: 该错误显示:追踪与中断点陷阱。在网上查了一堆,说是core file的错误,但修改后也没有解决。实际上,真正的原因是:文件的路径错了。 打开VINS-Fusion的文件所在的空间&…

phpstorm使用教程

1.界面优化 ctrlalts --->Plugins--->搜素Material Theme UI--->安装--->重启phpstorm--->tool--->Material Theme--->Material Theme Chooser--->选择自己喜欢的风格就行 2.安装界面插件之后,修改字体颜色有讲究:需要点击图片…

影刀实例二,小某书如何持续下载图片

一,案例背景: 小某书平台,利用影刀rpa搜索关键词,然后下载对应文章的图片. 二,思路 1. 登录小某书平台,将网页放大最大【手动完成,作为初始状态】 2. 利用影刀命令【打开输入对话框】获得要搜索…

HCIA-H12-811题目解析(2)

1、【单选题】 在以太网这种多点访问网络上PPPOE服务器可以通过一个以太网端口与很多PPPOE客户端建立起PPP连接,因此服务器必须为每个PPP会话建立唯一的会话标识符以区分不同的连接PPPOE会使用什么参数建立会话标识符? 2、【单选题】PPP协议定义的是OSI参考模型中…

【Python】Selenium自动化测试框架

设计思路 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架,能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开&#xff0…

ubuntu配置免密登录vscode

1、配置免密登录 (1)在windows系统cmd下运行命令 ssh-keygen 一路回车,将会在C:\Users\用户名\.ssh目录下生成两个文件:id_rsa和id_rsa.pub。如下图所示。 (2)进入.ssh目录。如果想使用root用户&#xff0…