Springboot项目基础开发模式+注解

news2024/12/24 3:49:40

文章目录

  • web项目开发涉及基础
    • servlet+tomcat
    • struts
    • ssm架构
    • SpringBoot架构
    • tomcat
    • hibernate
  • Springboot注解
    • A
      • @Aspect
      • @Autowired
      • @AllargConstructor
      • @Around
    • B
      • @Bean
      • @Builder
    • C
      • @Configuration
      • @ConditionalOnMissingBean
      • @Component
      • @ComponentScan
      • @ConfigurationProperties
      • @CrossOrigin
    • D
      • @Documented
      • @Data
    • E
      • @EnableWebSecurity
      • @EqualsAndHashCode
      • @ExceptionHandler
      • @ExtendWith
    • F
    • G
      • @Getter
    • H
    • I
      • @interface
      • @Inherited
      • @Import
    • J
      • @ JsonInclude(xxx)
    • K
    • L
      • @Log4j
    • M
      • @MapperScan
      • @Mapper
      • @MockBean
    • N
      • @NoArgsConstructor
      • @Nullable
    • O
      • @Overrride
      • @Order
    • P
      • @PostConstruct
      • @Primary
    • R
      • @Retention(RetentionPolicy.RUNTIME)
      • @RestController
      • @RequestMapping
      • @ResponseBody
      • @RestControllerAdvice
      • @ResponseStatus
      • @RequestParam
      • @RunWith(SpringRunner.class)
      • @SpringBootTest(classes = {Application.class})
    • S
      • @Slf4j
      • @Service
      • @SpringBootApplication
      • @Setter
      • @SneakyThrows
    • T
      • @Target(ElementType.PARAMETER)
      • @TableName
      • @TableId
      • @TableFiled
      • @Test
    • V
      • @Value
    • W
      • @WebMvcTest
    • X
      • @Xxljob

web项目开发涉及基础

servlet+tomcat

Servlet容器是Java Web应用程序的核心组件,负责接收HTTP请求,并将请求路由到相应的Servlet进行处理。
Servlet,使用java编写的服务器端程序,主要功能是交互式地浏览和修改数据,生成动态地web页面。狭义上讲,是Java语言实现的接口;广义上讲,是实现Servlet接口的类。
Servlet需要由Servlet容器进行管理,tomcat就是一个免费开源的Servlet容器;

工作模式:

执行过程:
	客户端发送请求到服务器
	→服务器启动并调用ServletServlet根据请求生成响应返回给服务器
	→服务器将响应返回给客户端

没有定义Servlet也可以处理HTTP请求:
	Springboot默认处理机制,依赖于SpringMVC框架,其内嵌了一套请求和响应的逻辑;

默认的处理方式:结合SpringmvcTomcat实现;
	1. 引入依赖spring-boot-starter-web,会内嵌Tomcat以及Springmvc框架;
	2. 自动配置,检测到Tomcat自动配置web应用的默认环境,自动配置Springmvc,以及设置dispatcherServlet为请求的前端控制器;
		DispatcherServletSpringmvc的核心组件,负责接收所有的http请求;
	3. 请求到达Tomcat时,会转发请求给DispatcherServlet。
		请求映射,DispatcherServlet解析请求链接,找到对应的处理器(Controller),通过@RequsetMapping 注解实现;
		处理请求,DispatcherServlet调用响应的控制方法,可以是@Controller@RestController@RequestMapping注解修饰的java方法;
	4. 视图解析,Controller方法执行后,返回一个试图名称或模型数据;DispatcherServlet根据返回值解析为具体的视图;
		Controller方法通过Model对象添加数据,再将其传递到视图中;
	5. 视图渲染,根据解析得到的视图名称,DispatcherServlet委托给视图解析器来找到渲染视图。常见的视图解析器有JSPThymeleafFreeMarker等;
	6. 返回响应,渲染完成后,生成的HTML内容作为响应体返回给客户端;
	7. 客户端渲染,客户端(浏览器)接收到响应后,将渲染并显示页面给用户;
	其余过程:
		1. 资源处理,静态资源请求,如CSSJavaScript文件和图片等,SpringMVC可以配置静态资源的映射路径,由DispatcherServlet处理这些资源的请求;
		2. 异常处理,请求处理过程中出现异常,Spring MVC异常解析器(HandlerExceptionResolver)将捕获这些异常,并将其映射到错误处理视图;
		3. 日志记录,SpringMVC可以配置日志记录器,记录处理过程,以便于调试和监控;

struts

定义:
	是一个开源的web框架;
缺点:
	1. form表单处理;
		处理复杂,需要在ActionForm中定义与HTML表单元素对应的属性,并实现相应的getter和setter方法。
	2. action单态模式;
		对于网站并发性的处理有影响;
		Struts1中的Action是单例模式的,这意味着对于所有的请求,服务器内存中只有一个Action类实例来处理

ssm架构

概述:

Spring+SpringMVC+MyBatis ,其中Maven来创建Web项目,便于管理项目中所需的依赖;
所需依赖包,包括(但不限于):
	日志类 log4j-slf4j-impl、log4j-web 
	MySQL驱动包 mysql-connector-java
	
打包上线采用war包,并在tomcat上运行;

Spring、SpringMVC 和 MyBatis 这三个框架在Java Web开发中各自承担着不同的职责,并通过集成实现了前后端分离、业务逻辑处理和持久层操作等功能。下面分别解释每个部分的作用以及它们之间的交互方式:

作用: Spring 是一个轻量级的企业级 Java 应用框架,它的核心功能包括依赖注入(DI, Dependency Injection)和面向切面编程(AOP, Aspect Oriented Programming)。Spring 负责管理整个应用程序的对象生命周期和依赖关系,使得对象之间的耦合度降低,便于测试和维护。同时,Spring 提供了事务管理、数据访问抽象层(如JDBC模板、Hibernate模板等)、以及对其他各种第三方框架的良好集成能力。
MyBatis:

作用: MyBatis 是一个优秀的持久层框架,专注于SQL映射和动态SQL生成。它负责数据库的操作,包括增删改查(CRUD)等,程序员可以编写原生SQL语句并通过Mapper接口进行调用,MyBatis会自动处理结果集映射到Java对象的过程,简化了数据库访问层的开发。
SpringMVC:

作用: SpringMVC 是Spring框架的一个模块,用于构建Web应用程序的模型-视图-控制器(MVC)架构。它负责接收HTTP请求,解析参数,调用相应的Service处理业务逻辑,最后返回响应给客户端。具体流程包括:DispatcherServlet作为前端控制器接收请求,通过HandlerMapping映射到Controller处理方法,Controller调用Service完成业务逻辑,Service再调用DAO(Data Access Object)执行数据库操作(通过MyBatis),返回结果后由Controller组织视图数据并选择合适的视图渲染给用户。
相互之间的交互:

在整合后的系统中,Spring容器统一管理所有的Bean,包括Service层的类、MyBatis中的Mapper接口和数据源等。
当用户发起HTTP请求时,请求会被SpringMVC的DispatcherServlet捕获并根据配置分发给对应的Controller。
Controller在接收到请求后,会调用Service层的方法处理业务逻辑,这些Service对象是由Spring容器创建并注入进来的。
Service层在执行业务逻辑过程中,如果涉及到数据库操作,则会进一步调用已由Spring管理的MyBatis Mapper接口,MyBatis会执行预编译的SQL语句并返回结果给Service。
Service层处理完成后,将结果返回给Controller,Controller再决定如何组装视图数据并转发至指定的视图(可能是HTML页面、JSON数据或其他格式)展示给用户。
这样就形成了一个完整的请求处理链路:客户端请求 -> SpringMVC -> Service -> MyBatis -> 数据库 -> 数据结果 -> Service -> 视图渲染 -> 响应给客户端。在这个过程中,Spring起到了粘合剂的作用,将各个层次紧密地联系在一起,降低了各组件之间的耦合度,提高了整体架构的可扩展性和灵活性。

其中持久层(Mapper)、业务层(Service)、控制层(Controller),采用的注解分别为:@Repository、@Service、@Controller

SpringBoot架构

SpringBoot简化了Spring应用的创建、运行、调试、部署等,依赖“约定大于配置”的理念,不需要过多关注XML配置,使开发者更多的关注于应用的开发;
通过基础的POM文件,就可以实现Maven配置;
可支持独立的jar包运行;
内嵌Servlet容器,即免费的tomcat服务;
能够快速整合第三方框架,基本原理是Maven的依赖关系,maven的集成,完全注解化,简化XML配置,内嵌tomcate,以java应用程序执行。

注解:
@Controller controller层 注入服务
@Service 注入dao
@repository 实现dao
@component 标注一个类为Spring容器的Bean

tomcat

1. Tomcat是常见的免费web服务器。
2. 是否使用tomcat打开html的区别:
使用:则可以通过 http://12306.com/index.html 形式打开网站;
不使用:则需要通过 file:d:/test.html  形式 打开本地网站;
3. 8080 是tomcat的默认端口号

hibernate

HibernateJava领域常用的持久化框架,用于将对象关系映射(ORM)到关系型数据库。

Springboot注解

A

@Aspect

定义切面 = 将那些影响了多个类的公共行为抽取到一个可重用模块里。
使用 = 常用于记录日志、异常集中处理、权限验证、Web 参数校验、事务处理等等。

@Aspect
@Component 
// 需要与Component一起使用
public class LogsAspect {
        @Around("(execution(* com.unicom.opn.api.core.controller.*.*(..))))")
        // 标注使用范围
        // 环绕通知:目标方法执行前后分别执行一些代码,类似拦截器,可以控制目标方法是否继续执行。
        public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {}
        // 标记切点
}

使用三步走:
1)在类上使用 @Aspect 注解使之成为切面类
2)切面类需要交由 Sprign 容器管理,所以类上还需要有 @Service@Repository@Controller@Component  等注解,一般会和@Component一起使用
3)在切面类中自定义方法接收通知
  1. filter、interceptor、aspect区别:
    filter = 作用于servlet
    interceptor = 作用于URL
    aspect = 作用的对象可以是任何一个方法

@Autowired

可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。

  1. 注解修饰成员属性,则无需使用set方法,就可以实现对属性的设置。
public class 当前类{
@Autowired 
private 接口 对象名;
}
// 表示将对象名 引入 当前类;
// 成员属性,会根据成员类型匹配对应的bean进行装配;如果类型是接口,那么会自动装配接口的实现类对象;
本质采用的是java的反射机制实现,将成员对象Bean注入到具体对象。

@AllargConstructor

注在类上,提供类的全参数构造函数;

@Around

环绕通知,可以说是使用最频繁的方式,会将整个方法(此方法)包围起来。
参数execution=设置此方法的调用情况。

execution(<修饰符模式><返回类型模式><方法名模式><参数模式><异常模式>?)
除了返回类型模式,方法名模式和参数模式外,其余都是可选填项。

修饰符模式 = 表示哪类型方法(publc、privateprotected等),不写就是所有方法;
返回类型模式 = 表示返回值的类型;
包名 = 具体的包名

也就com.unicom.opn.api.core.controller…* 包及其子包都会调用@Around注释的方法。

execution(* com.unicom.opn.api.core.controller..*.*(..)))

修饰符模式 = 没有书写,说明是所有方法;
返回值类型 = * 表示全部类型
包名 = com.unicom.opn.api.core.controller 具体的包名
.. = 表示包以及包下所有子包
* = 表示全部
.*(..) = 表示全部方法

B

@Bean

修饰方法的注解,告诉方法,产生一个Bean对象,并交由Spring管理。

@Builder

概念:为类生成相对复杂的构造器API。
特点:

作用于类,将其变成创建者模式;
以链的形式调用;
生成一个全参的构造方法;
自动生成的构建器会要求你为每个字段提供一个值;

缺点:
没有无参构造方法;

理解:

@Builder
public class xx1{
	private Integer a;
	private String b;
}

该方法编译后的文件为:
public class xx1 {
    private Integer a;
    private String b;

    xx1(final Integer id, final String name, final Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public static xx1.xx1Builder builder() {
        return new xx1.xx1Builder();
    }

    public static class xx1Builder {
        private Integer a;
        private String b;

        FatherBuilder() {
        }

        public xx1.xx1Builder a(final Integer a) {
            this.a = a;
            return this;
        }

        public xx1.xx1Builder b(final String b) {
            this.b = b;
            return this;
        }

        public Father build() {
            return new Father(this.a, this.b);
        }

        public String toString() {
            return "xx1.xx1Builder(a=" + this.a + ", b=" + this.b + ")";
        }
    }
}
使用:
public xx1 function1(String salt){
	return xx1.builder()
			.a(this.a)
			.b(function2(salt))
			.build();
}

C

@Configuration

用于定义配置类,可替换xml配置文件;
被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

解释“用于定义配置文件,可替换xml配置文件”

基于xml的配置,该文件通常位于src/main/resources目录中;
在xml文件中,可以配置bean和配置;

具体案例是:
<!-- applicationContext.xml -->
<?xml version="1.0" encoding="UTF-8"?>
// 标准的xml申明,指明版本号以及编码类型;
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
// beans根元素
// xmlns 定义xml文件使用的命名空间
// xmlns:xsi 指定xml schema实例的命名空间
// xsi:schemaLocation 指定xml wchema文件的位置
    <bean id="myService" class="com.example.MyServiceImpl">
        <!-- 配置属性 -->
        <property name="property" value="value"/>
    </bean>
    // bean 定义spring管理的bean
    // id 该bean的唯一标识符
    // class 该bean的实现类
    // 标签property 该bean的属性定义,其中属性名是property 值是value

    <!-- 可以添加更多的bean定义 -->
</beans>

@ConditionalOnMissingBean

用于判断指定的类是否在BeanFactory中;
指定的类如果在BeanFactory中,则匹配失败;不在,则匹配成功;
匹配成功则,执行方法。
当BeanFactory中没有指定的bean的时候才能匹配,主要是用来做自动配置的,当程序没有配置指定的类的时候,就会使用默认配置;

@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
// 当Bean工厂没有ObjectMapper的Bean,才创建jacksonObjectMapper的Bean。

@Component

修饰类,表示将该类交由Spring管理。
即 标注该类为Spring容器的bean。
定义Spring管理Bean = 被该注解修饰的类都交由Spring管理。

@ComponentScan

用于类或接口上,主要是指定扫描路径;
spring会把指定路径下带有指定注解的类自动装配到bean容器里。
扫描被@Controller、@Service、@Component、@Repository等注解标注的类。

@ConfigurationProperties

@ConfigurationProperties(prefix=“main”)
最适用于所有具有相同前缀的分层属性,用于将配置文件中mail开头的属性绑定到POJO中

@CrossOrigin

理解:
	前后端分离项目,需要跨域,当前前端可以用JSONP解决,java端通过@CrossOrigin实现;
	跨域:
		浏览器出于安全性考虑,不执行其他网站的脚本;由于其同源策略造成的;	
作用:
	用来处理跨源资源共享(CORS)的注解;
	跨源资源共享(CORS),是由大多数浏览器实现的W3C规范,允许对跨域请求进行灵活授权,用来代替IFRAMEJSONP等非正规实现方式;
举例:
	当前端应用尝试从不同的域名、端口或协议请求数据时,浏览器为了安全按考虑会阻止这种请求,除非服务器明确允许;
	不添加@CrossOrigin
	意味着来自不同源的AJAX请求可能会被浏览器阻止。前端运行在http://localhost:3000 而后端运行在http://localhost:8080,那么前端发起的请求可能会因为跨域问题而失败;也就是相同的域名地址,不同的port,表示不同的域;
	添加@CrossOrigin
	希望允许特定来源的前端应用访问服务的REST API,可以在控制器方法或类级别使用该注解,显式得开启CORS支持;

D

@Documented

用于指示编译器将被它修饰的注解信息是否要包含在生成的API文档中,该注解存在-被记录;反之,不被记录。

@Data

  1. 使用前提:
    在项目依赖中引入lombok,其是一个工具类库,以简化代码,提高开发效率;
  2. 含义
    修饰类,提供类get、set、equals、hashCode、canEqual、toString方法。

E

@EnableWebSecurity

开启SpringSecurity的默认行为,为某些请求路径开启安全认证策略。

@EqualsAndHashCode

注在类上,提供对应的equals和hashCode方法;
注解中的属性:of、callSuper。
of = 表示在equals、hashcode方法中是否会使用of数组中指定的属性;
of属性值只能填写子类中的属性;

callSuper = 表示在equals、hashcode方法中是否会引用当前类的父类中的属性;

@ExceptionHandler

注在方法上,注解名后的括号=指明要捕获哪些异常,该方法 = 指明对异常进行如何处理。

@ExtendWith

概念:

注解告诉JUnit使用指定的扩展(Extension)来增强测试类的行为;
@ExtendWith(SpringExtension.class)
// SpringExtension是Spring提供的一个测试扩展,它允许你使用Spring的测试支持框架,例如@SpringBootTest,@WebMvcTest,@DataJpaTest等注解来自动配置Spring环境,从而更容易地测试Spring应用程序。

F

G

@Getter

注在类上,提供该类所有属性的get方法;
注在属性上,提供该属性的get方法。

H

I

@interface

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

public @interface RequestJson {
    String value() default "";
}
// 其中,RequestJson是注解名,@interface表示自定义注解。
// @interface声明一个注解,定义成员变量与类型;
// 方法名 = 成员变量名;方法返回值 = 变量类型;

@Inherited

用来指定该注解可以被继承。
使用 @Inherited 注解的 Class 类,表示这个注解可以被用于该 Class 类的子类。
父类使用@Inherited注解,则子类直接继承该注解。

@Import

用来导入配置类或者一些需要前置加载的类。

J

@ JsonInclude(xxx)

修饰类(实现Serializable),则该实体类系列化成json时,在某些策略下,某些字段不去序列化。
xxx值为如下:

JsonJsonInclude.Include.ALWAYS:
	表示总是序列化所有属性
JsonJsonInclude.Include.NON_NULL:
	表示序列化非null属性
JsonJsonInclude.Include.NON_ABSENT:
	表示序列化非null或者引用类型缺省值,例如java8的Optional类,这个选中通常与Optional一起使用
JsonJsonInclude.Include.NON_EMPTY:
	表示序列化非Empty的属性,例如空的集合不会被序列化
JsonJsonInclude.Include.NON_DEFAULT:
	仅包含与POJO属性默认值不同的值
JsonJsonInclude.Include.CUSTOM:
	由{@link JsonInclude#valueFilter}指定值本身,或由{@link JsonInclude#contentFilter}指定结构化类型的内容,由过滤器对象的equals方法进行序列化,返回true则会被排除,返回false会被序列化
JsonJsonInclude.Include.USE_DEFAULTS:使用默认值

K

L

@Log4j

注在类上,提供对应的Logger对象,变量名为log

M

@MapperScan

指定包下面的所有接口,在编译之后生成相应的实现类。
该注解可以告诉MyBatis框架在哪里扫描Mapper接口,并将其注册为一个Spring的Bean,使得Mapper接口可以被自动注入到其他组件中,便于省略手动配置Mapper接口实现类的步骤。
案例:

@MapperScan("com.unicom.opn.api.dao.mapper")
@ComponentScan("com.unicom")
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

扫描com.unicom.opn.api.dao.mapper下的Mapper接口,编译生成对应的实现类;
SpringBoot在启动时自动扫描该路径的Mapper接口,将其注册为Spring的Bean,使得其他组件中可以直接注入。

@Mapper

定义 = 定义成一个接口interface
作用 = 将@Mapper将定义的接口交给Spring进行管理;不用写Mapper.xml文件;为这个接口生成对应的实现类,让别的类引用。

@MockBean

作用 = 将Mock对象添加到Spring上下文中。
被注解修饰的对象,将替换Spring上下文中任何相同类型的现有bean,如果没有定义相同类型的bean,将添加一个新的bean。

N

@NoArgsConstructor

注在类上,提供无参构造方法。

@Nullable

可以注在方法、属性、参数上,分别表示方法的返回值为空、属性值为空、参数值为空。

O

@Overrride

是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记

@Order

作用:

定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@OrderOrdered接口的影响;

处理场景:

在处理多个相同类型或功能的bean时尤为重要,比如多个拦截器、过滤器或后置处理器等。

注解参数:

@Order(参数)
参数值,越大,说明Bean的执行优先级越低;
参数值,越小,说明Bean的执行优先级越高;

P

@PostConstruct

被@PostConstruct注解的方法在项目启动的时候执行这个方法,即在spring容器启动的时候执行。

@Primary

某种情况下,需要注册多个相同类型的Bean对象;
使用情况:

  1. = Bean和primary一起使用;
    则该对象具有较高的优先级;

R

@Retention(RetentionPolicy.RUNTIME)

说明自定义注解的生命周期。
RetentionPolicy.RUNTIME = 始终不会丢弃,运行期也保留读注解。

使用

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) // 定义注解的生命周期
public @interface ServiceId {
    BusinessEnum value();
}

@RestController

@controller和@ResponseBody 的结合;
前者 = 该类是一个控制器,负责接收请求、处理请求,并返回响应。
后者=将请求响应的数据以指定的格式写入到Response的body中。

@RequestMapping

  1. 将任意HTTP请求 映射到控制器方法上来。
    将请求和处理请求的控制器方法关联起来,建立映射关系。
    即可修饰类,也可以修饰⽅法,当修饰类和方法时,访问该方法的Url地址是:类 + 方法。
    在这里插入图片描述

  2. @GetMapping和@PostMapping
    @GetMapping = 用于将HTTP get请求映射到特定处理程序;
    @PostMapping = 用于将HTTP post请求映射到特定处理程序;
    @GetMapping = @RequestMapping(method = RequestMapping.GET)
    @PostMapping = @RequestMapping(method = RequestMapping.POST)

  3. Post请求和get请求
    get请求将参数放在链接上,即xxx?参数1=值1&参数2=值2
    post请求将参数放在请求体中;

get请求比post请求更快?
原因是:
浏览器请求服务器需要经过固定的三次握手连接过程,但是在数据传输方面存在问题;
post请求会发送两次数据,一次是请求头,得到服务返回的100 continue回复;第二次是数据,得到服务器返回的200 OK响应。

具体区别:
post比get更安全,get会被浏览器缓存,进而提高重复内容的检索效率;
post比get传输的数据更多,数据类型更多;
post比get慢;
post一般用于修改和写入数据,get一般用于检索或筛选之类的。

@ResponseBody

将controller的方法返回的对象,通过合适的转换器,转换为指定的格式,写入到response对象的body区(响应体中),通常用来返回JSON或XML。

@RestControllerAdvice

用于定义全局异常处理和全局数据绑定的类;
被应用于带有@Controller和@RestController注解的类上,用于统一处理这些类中抛出的异常,并对返回的数据进行统一处理。

@ResponseStatus

用法:①加在自定义异常类上;②加在目标方法上。
有三个属性:code、value、reason。
具体介绍:

加在目标方法上:
value = 设置异常的状态;
reason = 异常的描述;
加在@ExceptionHandler下方:
捕获异步请求异常 = 当方法捕获到异常后,返回HTTP响应的状态码为@ResponseStatus指定的状态码;

参考:
https://blog.csdn.net/ITWANGBOIT/article/details/103718926
不加ResponseStatus,则抛出自定义异常,以500的HTTP状态码响应到浏览器;
加ResponseStatus,抛出自定义异常的同时,以指定的HTTP状态和指定的reason响应到浏览器。

@RequestParam

作用:将请求中指定名字的参数给控制器中的形参赋值;

public Double xhjTestRisk(@RequestParam("mobile") String mobile,@RequestParam("mobile1") String mobile1,@RequestParam("tableName") String tableName){}

@RunWith(SpringRunner.class)

表明Test测试类要使用注入的类。
比如@Autowired注入的类,有了@RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效

@SpringBootTest(classes = {Application.class})

表明该类是测试类。

S

@Slf4j

注在类上,提供对应的Logger对象,变量名为log,用作日志输出。
可以在该类中直接使用log对象。

该注解使用将省略
private final Logger logger = LoggerFactory.getLogger(当前类名.class); 
这句代码,实现log.info()日志输出。

常用方法:

方法名含义
.error打印错误信息,详细到栈跟踪信息
.log(Level level,String msg)输出日志,参数(日志级别,日志信息)
.info日志记录方式,用于记录程序的运行状态、事件或重要信息

@Service

注解在类上,将类声明为业务逻辑组件,将其对象存入Spring容器中,表示其是一个服务层Bean。
在控制器类中,注入该组件的实例,即可调用其中的方法。

参考:
https://blog.csdn.net/juggle_gap_horse/article/details/128972813

@SpringBootApplication

组合注解,一般用于SpringBoot项目的主类上;
包含:@CompoentScan、@EnableAutoConfiguration、@Configuration组成;

@CompoentScan
指定要扫描的组件包的路径,并将其注册为Spring容器的组件;

@EnableAutoConfiguration
根据应用程序的类路径和所声明的依赖来决定自动配置的内容,并将其添加到容器中;

@Configuration
表示该类是配置类,声明了一个或多个bean的定义,该多个bean被注解到Spring容器,供应用程序使用。

@Setter

注在属性上,提供set方法;

@SneakyThrows

作用范围:
只作用于方法或构造函数之上;
出现原因:

普通的Exception类,即受检异常或Checked Exception会强制要求抛出它的声明throws,调用者显示的处理这个异常;
大多数情况下,处理该种情况会变成在外面包一层RuntimeException,接着往上丢;
例如:
try {
	// 业务代码
} catch(Exception e) {
	throw new RuntimeException(e);
}
使用@SneakyThrows可以消除这样的模板代码,不需要担心Exception处理,该注解会自动处理。

例如:
原始的run方法为:
@Override
    @SneakyThrows
    public void run() {
        throw new Throwable();
    }.class文件为:
public void run() {
     try {
         throw new Throwable();
     } catch (Throwable var2) {
         throw var2;
     }
}

T

@Target(ElementType.PARAMETER)

注解的注解,又称为元注解,用于描述注解的使用范围。
自定义注解定义及使用:

定义:
@Target(ElementType.METHOD) // 表示该注解用于描述方法
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceId {
    BusinessEnum value();
}
使用注解:
authSwap(HttpServletRequest request, HttpServletResponse response, @RequestJson BaseParams baseParams)

参数列表:

参数名含义
ElementType.PARAMETER该注解只能声明在一个方法参数前,即只能用于描述参数。
ElementType.METHOD用于描述方法

@TableName

定义:MyBatis-Plus框架中的注解,用于标识实体类对应的数据库表名。

@TableId

定义:用于在java中标识一个数据表的主键字段。
注解(数据表中的属性键)
数据类型 属性名 =》表示实体类中对应字段含义。

@TableFiled

定义:用来解决实体类的字段名与数据库中的字段名不匹配的问题。
注解(数据表中的属性键)
数据类型 属性名 =》表示实体类中对应字段含义。

@Test

注解在某个方法上,标识测试方法;

V

@Value

动态读取配置文件中的某个系统属性;
三种使用方式:注入普通属性、注入配置文件、注入表达式并计算。

@Value(value = "${env}")  注入普通属性
@Value(value = "${server.port}") 注入服务器端口
参数来自于项目配置文件 = application.yml
spring项目读取配置文件的方式:①使用@Value;②SpringBoot中的@Configuration

两种实现形式:

@Value("${env}")
@Value(value = "${env}")

W

@WebMvcTest

概念:
是 Spring Boot 提供的一个测试注解,用于对 Web 层(主要是控制器层)进行单元测试。它会自动配置一个模拟的 Spring MVC 环境,而不会启动整个 Spring 应用上下文,这样可以更快地运行测试并且专注于 Web 层的功能。

案例:
@WebMvcTest(value = {xxx.class}, properties = {"task.enabled=false","prometheus.enabled=false"})
// 理解:
value = {xxx.class} --》 指定要测试的控制器类;
properties = {"task.enabled=false","prometheus.enabled=false"} --》这个属性列表允许在测试期间覆盖应用的默认属性。

X

@Xxljob

概念 = 注解一个方法或类,表示是一个XXL-JOB任务执行的入口;
注解在类上,表示该类中所有的方法都可以被xxl-job调度执行;
注解在方法上,表示该方法可以被xxl-job调度执行。

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

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

相关文章

C语言——构造类型

构造类型 数据类型分类 结构体 结构体的定义 定义&#xff1a;自定义数据类型的一种&#xff0c;关键字 struct &#xff0c;结构体类型的变量可以存储多个不同数据类型的数据。 定义格式&#xff1a; struct 结构体名 { 数据类型1 成员名称1; 数据类型2 成员名称2; … } 注…

Golang | Leetcode Golang题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; func isSelfCrossing(distance []int) bool {n : len(distance)// 处理第 1 种情况i : 0for i < n && (i < 2 || distance[i] > distance[i-2]) {i}if i n {return false}// 处理第 j 次移动的情况if i 3 && di…

Mac系统如何下载安装Photoshop软件mac的新版指南!

Photoshop&#xff08;简称PS&#xff09;是一款广受欢迎的图像处理工具&#xff0c;在设计、摄影、广告等领域广泛应用。对于Mac用户&#xff0c;安装Photoshop可能会涉及到一些特殊的步骤。本文将为你提供在Mac上安装Photoshop的详细教程及常见问题的解决方案。 一、准备工作…

由微软开源GraphRAG加持的AI智能体,让律师变得更强大!

随着人工智能大模型时代的到来&#xff0c;LLM大语言模型、RAG增强检索、Graph知识图谱、Prompt提示词工程等技术的发展日新月异&#xff0c;也让各行各业更加期待技术带来的产业变革。 比如&#xff0c;法律行业&#xff0c;虽然通用大模型已经能够适配一些法律场景&#xff…

从自动化到智能化:物联网技术在转转智能质检中心的应用

1 背景2 物联网介绍 2.1 开篇故事2.2 物联网是什么2.3 物联网的基本组成 3 物联网技术选型和落地方案 3.1 应用层协议选型3.2 Broker 选型3.3 QoS 消息质量选型3.4 Broker 的部署方案 4 结语5 参考链接 1. 背景 在转转智能质检中心&#xff0c;随着业务的不断发展&#xff0c…

MQ死信对列

面试题&#xff1a;你们是如何保证消息不丢失的&#xff1f; 1、什么是死信 死信就是消息在特定场景下的一种表现形式&#xff0c;这些场景包括&#xff1a; 1. 消息被拒绝访问&#xff0c;即消费者返回 basicNack 的信号时 或者拒绝basicReject 2. 消费者发生异常&#xff0…

vue3在高德地图中制作气象扇形雷达图

这是效果图&#xff0c;每隔22.5就会有一个扇形区域&#xff0c;有三层区域&#xff0c;第一层是距离圆点5km&#xff0c;第二层是10km&#xff0c;第三层是50km。 第一步&#xff1a;高德地图中绘画圆 // 构造矢量圆形let circle new AMap.Circle({center: position.value, …

rv1126-rv1109-读取mipi摄像头ID

1.有那个一个需求,需要读取mipi摄像头ID 起初,我以为很简单,实际非常复杂; 2.移植原有的逻辑,就是操作I2C函数读取ID寄存器,但是一直失败; 3.然后发现是电源没有打开;然后电源又是在DTS里面配置的 4.配置电源后发现要配置时钟 5.配置时钟后发现还要配置摄像头的上…

Vue框架学习笔记-7

Vue-cli项目中的mixin Vue-cli 项目中的 mixin 是一种强大的功能&#xff0c;允许你在多个组件之间共享可复用的方法和/或选项。Mixin 本质上是一个对象&#xff0c;它可以包含组件选项中的任意选项&#xff0c;如数据、方法、生命周期钩子等。当组件使用 mixin 时&#xff0c…

浙商证券社招入职人才测评:语言数字逻辑性格北森测评笔试题库高分答案、通关技巧

浙商证券作为一家综合性证券公司&#xff0c;其社会招聘的待遇情况包括但不限于以下几个方面&#xff1a;首先&#xff0c;公司提供具有竞争力的薪酬体系&#xff0c;其中应届生的平均薪资待遇大约在12K-20K之间&#xff0c;并且可能发放20个月的薪资&#xff0c;总包大约在25万…

好书推荐!这本Transformer书红的发紫,浅显易懂掌握大模型NLP技术!(附文档)

在大数据和人工智能时代&#xff0c;机器学习和深度学习已经成为各行各业解决问题的有效方法&#xff0c;自然语言处理&#xff0c;是深度学习的重要应用领域之一。 而自然语言处理这个研究领域在过去20年中发生了翻天覆地的变化&#xff0c;从传统的自然语言处理方法到深度学…

EcoDev Studio 与 gitlab【拉去项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下&#xff0c;右键Git Bash Here打开git命令窗口 2、初始化本地仓库&#xff1a; git init将本地项目的所有文件添加到暂存区&#xff1a; git a…

Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]

文章目录 切入点案例测试views.py测试代码templates模板下的html文件配置路由运行服务 出现CSRF报错解决CRSF报错再次运行服务 查看结果 切入点 某些恶意网站上包含链接、表单按钮或者]avaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作 Gj…

好用的无线可视耳勺推荐:四大超有性价比产品集锦!

在生活中&#xff0c;耳部清洁是我们常常会关注却又容易忽视细节的一项日常护理。传统的挖耳勺比如棉签等等&#xff0c;有着不可视的局限性和操作失误的潜在风险。随着科技发展&#xff0c;无线可视耳勺逐步走进我们的视野&#xff0c;它结合了挖耳功能和内置摄像头&#xff0…

循环结构(四)——循环嵌套

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;所属专栏&#xff1a;C教程&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &a…

快速符合ISO26262产品认证——动力域L2监控方案精华分享

一、VCU应用层监控方案的ISO26262背景 “软件定义汽车”趋势下&#xff0c;更多汽车软件问题与消费者生命安全密切相关。而汽车行业ISO 26262《道路车辆功能安全》是一个国际安全标准&#xff0c;对安装在量产道路车辆上的电气、电子系统的功能安全进行了约束和规定&#xff0c…

C语言----约瑟夫环

约瑟夫环 实例说明&#xff1a; 本实例使用循环链表实现约瑟夫环。给定一组编号分别是4、7、5、9、3、2、6、1、8。报数初始值由用户输入&#xff0c;这里输入4&#xff0c;如图12.18所示&#xff0c;按照约瑟夫环原理打印输出队列。 实现过程&#xff1a; (1)在 VC6.0中创建…

整合springboot、mybatis-plus、做的电影的增删改查以及使用七牛云做图片的上传

一、建表 1.在数据库testdb库中新建一个movie表 2.表中的字段&#xff1a; mo_idmo_namemo_actormo_salespic_name 二、编写代码 1.第一步添加坐标 <properties><java.version>8</java.version></properties><dependencies><!--springspr…

一文带你快速了解——HAProxy负载均衡

一、HAProxy简介 1.1、什么是Haproxy HAProxy是法国开发者 威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则表达式及web状态统计。…

用「画家流水线」的方式理解Transformer中间层

【导读】 Transformer架构层层堆叠&#xff0c;包含十几亿甚至几十亿个参数&#xff0c;这些层到底是如何工作的&#xff1f;当一个新奇的比喻——「画家流水线」&#xff0c;被用于类比并理解Transformer架构的中间层&#xff0c;情况突然变得明朗起来&#xff0c;并引出了一些…