当前位置: 首页 > article >正文

【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);
    }

http://www.kler.cn/a/149815.html

相关文章:

  • Elasticsearch(ES)简介
  • 单例模式详解:如何优雅地实现线程安全的单例
  • DAY6 线程
  • 985研一学习日记 - 2024.11.12
  • Node.Js+Knex+MySQL增删改查的简单示例(Typescript)
  • 网络安全技术在能源领域的应用
  • 使用elasticsearch-head插件修改elasticsearch数据
  • [UGUI]Unity背包系统制作详细步骤
  • 【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统
  • 王者农药小游戏
  • MySQL 索引类型
  • html实现计算器源码
  • linux 账号管理实例一,stdin,passwd复习
  • 力扣105. 从前序与中序遍历序列构造二叉树
  • 虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?
  • 树与二叉树堆:链式二叉树的实现
  • 手机 IOS 软件 IPA 签名下载安装详情图文教程
  • 第七节HarmonyOS UIAbility生命周期以及启动模式
  • 基于SpringBoot的图书管理系统
  • <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 7》(11)
  • AI算法中的模型量化岗是做什么的
  • 制作心理咨询小程序的详细指南
  • 开发定制化抖音票务小程序的技术解析
  • 技术分享| anyRTC之RTN网络
  • 解决苹果手机iphone手机强制重启
  • 6-4 jmu-python-发牌