第一篇-基础-第三章-SpringBoot基础

ops/2024/9/24 21:24:42/

3.1-常用注解和@SpringBootApplication标注分析

注解与业务逻辑无关,也不是程序本身,但可以对程序做出解释,程序中的类/方法/变量/参数/包等都可以被注解,完成编译检查工作,减少配置,减少重复工作等等。

常用注解

注解

标注位置

功能

@Autowired

成员变量

自动注入依赖

@Bean

方法

@Bean用于注册Bean,@Bean标注方法时,等价于在XML中配置Bean

@Component

用于注册组件,当不清楚注册类属于哪个模块时就用这个注解

@ComponentScan

开启组件扫描器

@Configuration

声明配置类

@ConfigurationProperties

用于加载额外的properties配置文件

@Controller

声明控制器类

@ControllerAdvice

用于声明全局异常处理类和全局数据处理类

@EnableAutoConfiguration

开启项目的自动配置功能

@ExceptionHandler

方法

声明处理全局异常的方法

@Import

用于导入一个或多个@Configuration注解标注的类

@ImportResource

用于加载xml配置文件

@PathVariable

方法参数

让方法参数从URL中的占位符中取值

@Qualifier

成员变量

与@Autowired配合使用,当Spring容器中有多个类型相同的Bean时,可以用@Qualifier("xxx")来做别名处理,指定注入别名的那个Bean

@RequestMapping

方法

指定方法可以处理哪些URL请求

@RequestParam

方法参数

让方法参数从URL参数中取值

@Resource

成员变量

与@AutoWired功能相似,但是有name和type两个参数,可以根据Spring配置的Bean的名称进行注入

@ResponseBoby

方法

表示返回的结果直接写入到Http response body中,如果返回是字符串,则直接显示该字符串

@RestController

@Controller与@ResponseBoby的合集,表示这个控制器下面所有的方法都被@ResponseBoby标注

@Service

服务的实现类

用于声明服务的实现类

@SpringBootApplication

主类

用于声明项目主类

@Value

成员变量

动态注入,支持"#{}"和"${}"表达式

@SpringBootApplication标注分析

启动类必须被@SpringBootApplication注解标注,从而启动一个SpringBoot项目的SpringApplication.run()方法。

@SpringBootApplication注解使用简单,但功能复杂,主要是它本质是多个功能强大的注解组合而成,最核心的三个注解为:

  • @SpringBootConfiguration注解:让项目采用基于java注解的配置方式,而不是传统的xml方式
  • @EnableAutoConfiguration注解:开启自动配置,这样项目启动时将自动加载所有的配置文件和配置类
  • ComponentScan注解:启动组件扫描器,这样项目才能自动发现并创建各个组件的Bean,包括Web控制器(@Controller),服务(@Service),配置类(@Configuration)和其他组件(@Conponent)

注意注意:@SpringbootApplication只能扫描其所在的包及其子包中的代码,如果是其他目录下的各类组件类,那么就需要额外的添加扫描路径-@ComponentScan(basePackages = "包名")。

3.2-Bean的注册和获取

Bean是什么?

Bean是SpringBoot根据配置文件的数据信息创建并可管理的对象。简单来说,就是SpringBoot项目启动时,SpringBoot首先会自动扫描所有的组件,自然注册所有的Bean,最后把这些自动创建的Bean注入到各自的使用场景中。

Bean注册

1,让SpringBoot发现@Bean

要让Bean被SpringBoot发现,那么Bean所在的类必须是能被扫描的组件

  1. @Configuration:声明配置类
  2. @Controller:声明控制器类
  3. @Service:声明服务接口类
  4. @Repository:声明数据仓库类
  5. @Componnent:声明组件类,通常用这个

当然也可以不用这些注解,直接将使用了@Bean所在的类使用@Import注解注册到SpringBoot项目上.

package com.sun.test.bean;//@Component 注释掉
public class BeanTest {@Beanpublic String getMyName() {return "Mr_Sun_01";}
}@SpringBootApplication
@Import({com.sun.test.bean.BeanTest.class})//多个类就逗号分隔接着写即可
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}
}

2,@Bean的使用方法

源码分析:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {@AliasFor("name")String[] value() default {};@AliasFor("value")String[] name() default {};/** @deprecated */@DeprecatedAutowire autowire() default Autowire.NO;boolean autowireCandidate() default true;String initMethod() default "";String destroyMethod() default "(inferred)";
}

1,value和name属性的作用是一样的,就是给Bean起别名,让SpringBoot可以区分多个类型相同的Bean。(注意注意:SpringBoot管理的Bean是以类为主体)

使用过程最好根据场景设置别名(如果没设置别名,则默认以方法名为Bean的别名)

2,autowireCandidate属性 表示Bean是否采用默认的匹配机制,默认为true(表示以类来找),设置为false则根据别名来匹配查找,这个属性如果用了别名了一般也用不上。

获取Bean

1,如果当前类型只有一个Bean,可以直接使用@AutoWired注解(如果Bean的方法名和注入的变量名一样也可以直接用@AutoWired)

2,@AutoWired也可以组合@Qualifier("别名")进行指定别名的Bean

3,如果涉及多个Bean,用@Resource(name="别名")即可完成注入。

4,@Value也可以完成注入

1,将常量注入到info中,跟等号赋值效果一样@Value("hello_SpringBoot")String info;2,注入Bean,跟@Resource(name="name")效果一样@Value("#{myName}")String name;3,注入配置文件中的信息,使用${pswd}可以把application.properties文件中指定名称的配置信息的值完成注入@Value(${pswd})String password;   

3.3-为SpringBoot项目添加依赖

pom.xml是Maven构建项目的核心配置文件,开发人员在此文件中为项目添加新的依赖,格式如下

<dependency><groupId>所属团队</groupId><artifactId>项目ID</artifactId><version>版本号</version>    <scope>使用范围(可选)</scope>
</dependency>

查询依赖的版本号

1,在MVNrepository的官网进行查询(https://mvnrepository.com)

2,在阿里云云效MAVEN进行版本查找(仓库服务)

3.4-SpringBoot的命名规范

1,配置类包名-config

主要保存所有被@Configuration标注的配置类

2,公共类包名-common

主要保存供其他模块使用的组件、工具、枚举等代码。

包中存放所有被@Component标注的组件类,包名也可以用component

包中存放所有的工具类,包名也可以叫utils或者tools

3,控制器类-controller

4,服务类-service

存放所有实现业务的服务接口或者服务类

这些接口的实现类都应该放在service包下的子类impl中

5,数据库访问接口包-dao

数据库访问接口也就是持久层接口,专门执行读写数据库,持久层接口通常命名为xxxDao

6,Mybatis持久层包-mapper

如果项目使用Mybatis作为持久层框架,Mybatis会把持久层接口命名为mapper(映射器),包名也会叫mapper

如果数据库访问接口也有具体的实现层,这些实现类应该放在数据库访问接口包的impl子包下面

7,数据实体包-bean/model/entity

早期,实体类放在bean包下

SpringMVC阶段,一般放在model下

Mybatis框架也会放在entity下

8,过滤器包-filter

9,监听器包-listener


http://www.ppmy.cn/ops/115469.html

相关文章

Flask学习之项目搭建

一、项目基本结构 1、 exts.py 存在的目的&#xff1a;在Python中&#xff0c;如果两个或更多模块(文件)相互导入对方&#xff0c;就会形成导入循环。例如&#xff0c;模块A导入了模块B&#xff0c;同时模块B又导入了模块A&#xff0c;这就会导致导入循环。 比如在这个项目中…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

监控和维护 Linux 系统的健康状态:从服务启动故障到操作系统查询

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native

原始代码&#xff08;非comfyui&#xff09;&#xff1a;https://github.com/lllyasviel/IC-Light comfyui实现1&#xff08;600星&#xff09;&#xff1a;https://github.com/kijai/ComfyUI-IC-Light comfyui实现2&#xff08;500星&#xff09;&#xff1a;https://github.c…

【可测试性实践】C++单元测试:gtest gmock

引言 google test是目前C主流的单元测试框架&#xff0c;本文介绍如何在工程引入gtest和gmock&#xff0c;并提供入门参考示例。根据黄金圈思维我们先思考Why&#xff08;为什么做&#xff09;&#xff0c;为什么我们要进行单元测试&#xff0c;为什么要引入mock手段来测试代码…

JavaScript:数组遍历

1、forEach let arr [1,2,3,4,5]arr.forEach(function(item,index,arr){arr[index] item 1 }) console.log(arr) // [2,3,4,5,6] 2、map let arr [1,2,3,4,5]let newArr arr.map(function(item,index,arr){return item1 }) console.log(newArr) // [2,3,4,5,6]

【c语言数据结构】超详细!模拟实现双向链表(初始化、销毁、头删、尾删、头插、尾插、指定位置插入与删除、查找数据、判断链表是否为空)

特点&#xff1a; 结构&#xff1a;指向前一结点指针数据指向后一结点指针由于循环&#xff0c;尾结点的下一结点next指向头结点&#xff08;哨兵结点&#xff09;空的双向链表只有自循环的哨兵结点&#xff08;头结点&#xff09; 模拟实现双向链表 LIST.h #define _CRT_…

高校大数据实训管理平台怎么选择?

泰迪智能科技大数据实训管理平台分为多个方向包括&#xff1a;人工智能方向、大数据方向、商务数据分析方向&#xff0c;不同高校可以结合高校情况选择合适自己院校的相关产品平台。 高校实训管理平台是实验室模块的核心母平台&#xff0c;对实验室的所有课程及实训资源进行统…