【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.hqwc.cn/news/225220.html

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

相关文章

反转链表的三种写法

题目链接:https://leetcode.cn/problems/reverse-linked-list/ 方法一:循环,维护好两个节点一个前一个后 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode local head;while(local ! null){List…

七、Lua字符串

文章目录 一、字符串(一)单引号间的一串字符(二)local str "Hello, "(三)[[ 与 ]] 间的一串字符(四)例子 二、字符串长度计算(一)string.len&…

信奥编程 1168:大整数加法

解析:在c中需要考虑这么几个问题,第一个是大数据的输入,第二个是大数据的存储,第三是大数据的计算方式,最后是输出。 针对上述几个问题,第一个问题,采用字符串的方式或者数组加循环的方式接收输…

PlantUML语法(全)及使用教程-时序图

目录 1. 参与者1.1、参与者说明1.2、背景色1.3、参与者顺序 2. 消息和箭头2.1、 文本对其方式2.2、响应信息显示在箭头下面2.3、箭头设置2.4、修改箭头颜色2.5、对消息排序 3. 页面标题、眉角、页脚4. 分割页面5. 生命线6. 填充区设置7. 注释8. 移除脚注9. 组合信息9.1、alt/el…

Python pyinstaller打包exe最完整教程

目录 1 简介 2 安装 3 原理和打包效果 3.1 原理概述 3.2 搜索模块 3.3 打包效果概述 3.4 打包成单个文件夹 优点 缺点 3.5 打包成单个exe 优点 缺点 4 打包 4.1 基本语法 4.2 参数总览 位置参数 可选参数 4.3 隐藏控制台窗口 4.4 资源嵌入exe 4.5 更改图标…

nginx配置相关应用服务

1、无ssl证书的conf文件 server {listen 80;server_name test.domain.com;root html;index index.html index.htm;location / {proxy_http_version 1.1;proxy_set_header Connection "";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_…

CCC联盟数字钥匙(一)——UWB MAC概述

本文在前面已经介绍了相关UWB的PHY之后,重点介绍数字钥匙(Digital Key)中关于MAC层的相关实现规范。由于MAC层相应涉及内容比较多,本文首先从介绍UWB MAC的整体框架,后续陆续介绍相关的网络、协议等内容。 1、UWB MAC架…

pip安装PIL模块失败 No matching distribution found for PIL

言简意赅,我在安装PIL模块的时候报错信息如下: pip install PIL Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple ERROR: Could not find a version that satisfies the requirement PIL (from versions: none) ERROR: No matching distr…

CH58x-BLE 程序阅读笔记

CH58x-BLE 程序阅读笔记 1. 广播1.1 广播类型设置1.2 广播数据长度 1. 广播 1.1 广播类型设置 1.2 广播数据长度 1) GAP-广播数据(最大大小31字节,但最好保持较短以节省广告时的电量) 31个字节包含了 length data type&a…

SpringBoot自动配置注入Bean工具autoconfigure

依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency> yml配置 student:red: com.ma.config.MinIOConfigProperties spring.factories org.springframework.…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库&#xff0c;它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎&#xff0c;它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

四招心理博弈术,让别人不敢欺负你,敬你三分

教你四招心理博弈术&#xff0c;让别人不敢欺负你&#xff0c;无论在职场中还是跟朋友交往中&#xff0c;为什么总是有人敢欺负你呢&#xff0c;是因为你不懂得人性博弈。其本质原因&#xff0c;是你做人没有边界感&#xff0c;或者没有原则&#xff0c;即便你有原则&#xff0…