数据填充

@Data

自动添加set、get方法

@Autowired

按类自动导入,由Spring提供,与springboot耦合度高。
@Autowired和@Resource注解的区别和联系_莫小兮丶的博客

@Resource

默认通过byName注入,如果没有匹配则通过byType注入,J2EE提供,与springboot耦合度低
@Autowired和@Resource注解的区别和联系_莫小兮丶的博客

@Value

此注解使用在字段、构造器参数和方法参数上。@Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支使用${}来将属性来源中(Properties文件、本地环境变量、系统属性等)的值注入到bean的属性中。
具体使用方法见 spring的@Value注解使用_菊花超人的博客

@ConfigurationProperties

@ConfigurationProperties(prefix = "spring.datasource")  

读取配置文件,填充到对应属性中,属性名称不要求一定相同,只需保证“set”字符串拼接配置文件的属性和setter方法名相同即可,支持松散绑定。
标注在Bean类上则填充其中对应属性,用在方法上则填充返回值中对应的属性。

组件相关

@EnableAutoConfiguration

帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。
具体使用方法不会,找了一堆资料都是讲原理。
(49条消息) SpringBoot之@EnableAutoConfiguration注解_zxc123e的博客-CSDN博客_enableautoconfiguration

@ComponentScan

用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component及相关 注解进行注册 bean 实例到 context 中。
Spring Boot注解之@ComponentScan用法和实现原理 - 楼兰胡杨 - 博客园 (cnblogs.com)

@Component

这是一个Bean。

@Configuration

@Component的拓展,此注解标注的类中 @Bean标记的方法的返回值添加为组件,如未指定组件名,默认为方法名。

@Bean

@Configuration与@Component作为配置类的区别 - 掘金 (juejin.cn)
Spring的单例bean与原型bean - 简书 (jianshu.com)
可在@Component 和 @Configuration 标注的类中方法上使用,将其返回值作为组件,如未指定组件名,默认为方法名。
在@Component组件中使用,获取的Bean每次都不是同一个对象 ,类似于原型Bean
在@Configuration组件中使用,获取的Bean每次都是同一个对象,类似于单例Bean。

@Repository

数据访问层Bean,@Component的拓展

@Service

业务层Bean,@Component的拓展

@Controller

控制层Bean,@Component的拓展

@PostConstruct

它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行,并且只运行一次,类似于Servlet的inti()方法。
执行的顺序是: 构造方法 -> @PostConstruct -> init()方法 -> @PreDestroy -> destroy()方法。
(49条消息) @PostConstruct与@PreDestroy使用_凌兮~的博客-CSDN博客

@PreDestroy

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。
执行的顺序是: 构造方法 -> @PostConstruct -> init()方法 -> @PreDestroy -> destroy()方法。
(49条消息) @PostConstruct与@PreDestroy使用_凌兮~的博客-CSDN博客

Controller

@Controller

控制器类Bean,@Component的拓展

@ResponseBody

直接返回结果,并转化为json格式

@ResponseStatus

此注解用于方法和exception类上,声明此方法或者异常类返回的http状态码。可以在Controller上使用此注解,这样所有的@RequestMapping都会继承。

@RestController

当于@ResponseBody+@Controller合在一起的作用,此注解用于class上,声明此controller返回的不是一个视图而是一个领域对象,对象对转为json字符串。

@RequestMapping

将Web请求与请求处理类中的方法进行映射,@RequestMapping可以定义动态路径 ,下面几个也是。

@RequestMapping("/users/{uid}")

@GetMapping

将HTTP get请求映射到特定处理程序的方法注解。

@PostMapping

将HTTP post请求映射到特定处理程序的方法注解。

@PutMapping

用于处理HTTP PUT请求。

@DeleteMapping

用于处理HTTP DELETE请求。

请求参数

@RequestAttribute

将web请求中的属性(request attributes,是服务器放入的属性值)绑定到方法参数上。
注意和@RequestParam区分开,attribute一般是后端加入请求中的,param一般是前端表单或路径参数加到请求中的。

@RequestParam

用于基本数据类型,复杂数据类型限制要用@Valid,放在参数前,表示只能接收参数a=b格式的数据,即 Content-Typeapplication/x-www-form-urlencoded类型的内容,如表单。
Http–@RequestBody和@RequestParam详解_Schafferyy的博客

@RequestPart

@RequestParam和@RequestPart的区别_借物小人的博客
@RequestPart主要用来处理content-type为multipart/form-datamultipart/mixed stream发起的请求,可以获取请求中的参数,包括普通文本、文件或复杂对象比如JSON、XML等,针对复杂对象,需要明确对应的content-type。

@RequestParam默认主要来处理query parameters, form data,and parts in multipart requests, 且是 key-value键值对这种文本

@RequestBody

放在参数前,表示参数从request body中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即 Content-Type不为 application/x-www-form-urlencoded类型的内容,一般用于json形式请求。
Http–@RequestBody和@RequestParam详解_Schafferyy的博客

@RequestBody后接基本数据类型对应的封装类报异常

原本是@RequestBody Long ***

JSON parse error: Cannot deserialize value of type `java.lang.Long` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.Long` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (PushbackInputStream); line: 1, column: 1]

封装到一个bo类后解决。

@PathVariable

获取url中的数据。

@RequestMapping("/users/{uid}")\
public String execute(@PathVariable("uid") String uid){\
}

@RequestHeader

把Request请求header部分的值绑定到方法的参数上,不存在则默认为null。

@RequestMapping(value = "/hello.htm")
public String hello(@RequestHeader(value="User-Agent", defaultValue="foo")String userAgent){
//.. 
}

@CookieValue

此注解用在@RequestMapping声明的方法的参数上,可以把HTTP cookie中相应名称的cookie绑定上去。

@ReuestMapping("/cookieValue")
      public void getCookieValue(@CookieValue("JSESSIONID") String cookie){
}

cookie即http请求中name为JSESSIONID的cookie值。

@CrossOrigin

此注解用在class和method上用来支持跨域请求,是Spring 4.2后引入的(没用过,不懂)。

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/users")
public class AccountController {
    @CrossOrigin(origins = "http://xx.com")
    @RequestMapping("/login")
    public Result userLogin() {
        // ...
    }
}

@ModelAttribute

通过此注解,可以通过模型索引名称来访问已经存在于控制器中的model,没用过,不常用。
Spring MVC @ModelAttribute详解 - 知乎 (zhihu.com)
Spring MVC @ModelAttribute注解 (biancheng.net)

@SessionAttributes

此注解用于type级别,用于将JavaBean对象存储到session中。
Spring MVC @SessionAttributes注解 - Just_Do - 博客园 (cnblogs.com)
@SessionAttributes参数

1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称。

2、types:根据指定参数的类型,将模型中对应类型的参数存储到session中

3、value:其实和names是一样的。


  @SessionAttributes(value={"names"},types={Integer.class})
  @Controller
  public class Test {
 
      @RequestMapping("/test")
      public String test(Map<String,Object> map){
          map.put("names", Arrays.asList("caoyc","zhh","cjx"));
          map.put("age", 18);
          return "hello";
       }
   }

 1、request中names:${requestScope.names}<br/>
 2、request中age:${requestScope.age}<br/>
 <hr/>
 3、session中names:${sessionScope.names }<br/>
 4、session中age:${sessionScope.age }<br/>

image.png

数据检验

两个valid区别及@Validated分组用法见
@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客

@Valid

Spring Boot 数据校验@Valid+统一异常处理_JYT IMXB的博客

@Validated

@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客

valid pojo属性填充限制

20200913110853722.png

null检查

@Null

验证对象是否为null

@NotNull

验证对象是否不为null, 无法查检长度为0的字符串

@NotBlank

检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.

@NotEmpty

检查约束元素是否为NULL或者是EMPTY.

Booelan检查

@AssertTrue

验证 Boolean 对象是否为 true

@AssertFalse

验证 Boolean 对象是否为 false

长度检查

@Size(min=, max=)

验证对象(Array,Collection,Map,String)长度是否在给定的范围之内

@Length(min=, max=)

Validates that the annotated string is between min and max included.

日期检查

@Past

验证 Date 和 Calendar 对象是否在当前时间之前

@Future

验证 Date 和 Calendar 对象是否在当前时间之后

@Pattern

验证 String 对象是否符合正则表达式的规则

数值检查

建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null

@Min

验证 Number 和 String 对象是否大等于指定的值

@Max

验证 Number 和 String 对象是否小等于指定的值

@DecimalMax

被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin

被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits

验证 Number 和 String 的构成是否合法

@Digits(integer=,fraction=)

验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

@Range(min=, max=)

Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message=“range.bean.wage”) private BigDecimal wage;

@Valid

递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)

@CreditCardNumber

信用卡验证

@Email

验证是否是邮件地址,如果为null,不进行验证,算通过验证。

@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)

Controller全局异常处理

示例(AjaxResult是自定义类)

@RestControllerAdvice
public class MyExceptionHandler
{
    private static final Logger log = LoggerFactory.getLogger(MyExceptionHandler.class);

    /**
     * 基础异常
     */
    @RespondBody
    @ExceptionHandler(MyException.class)
    public AjaxResult baseException(MyException e)
    {
        return AjaxResult.error(e.getMessage());
    }
    @RespondBody
    @ExceptionHandler(Exception.class)
    public AjaxResult handleException(Exception e)
    {
        log.error(e.getMessage(), e);
        return AjaxResult.error(e.getMessage());
    }
}

@ControllerAdvice

是@Component注解的一个延伸注解,Spring会自动扫描并检测被@ControllerAdvice所标注的类。
用法
@ControllerAdvice实现优雅地处理异常_KEN DO EVERTHING的博客
@ControllerAdvice 的介绍及三种用法_Ethan.Han的博客

@ExceptionHander

用于标注处理特定类型异常类所抛出异常的方法。当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。

事务

@Transactional

声明式事务管理编程中使用的注解

导入配置文件

@PropertySource导入properties或yml文件

黑马的springboot提到
@PropertySource要搭配@Configuration和@EnableConfigurationProperties(当前类.class)使用,
如使用@Component代替@Configuration,@EnableConfigurationProperties(当前类.class)可省略。
引入单个properties文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties"})

引入多个properties文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})

@ImportResource导入xml配置文件

可以额外分为两种模式 相对路径classpath,绝对路径(真实路径)file

注意:单文件可以不写value或locations,value和locations都可用

相对路径(classpath)

  • 引入单个xml配置文件:@ImportSource(“classpath : xxx/xxxx.xml”)
  • 引入多个xml配置文件:@ImportSource(locations={“classpath : xxxx.xml” , “classpath : yyyy.xml”})

绝对路径(file)

  • 引入单个xml配置文件:@ImportSource(locations= {“file : d:/hellxz/dubbo.xml”})
  • 引入多个xml配置文件:@ImportSource(locations= {“file : d:/hellxz/application.xml” , “file : d:/hellxz/dubbo.xml”})

取值:使用@Value注解取配置文件中的值

@Value("${properties中的键}")\
private String xxx;

@Import

导入额外的配置信息

功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar。

使用示例

@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

MyBatis系列

@Mapper

在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类

@Mapper
public interface UserDAO {
   //代码
}

@MapperScan

作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类

@SpringBootApplication
@MapperScan({"com.kfit.demo","com.kfit. * .mapper","org.kfit. * .mapper"})
public class SpringbootMybatisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
    }
}

Mybatis (不常用,基础的用mybatis-plus,复杂的用xml)

MyBatis手把手跟我做(八) Mybatis注解 - Mr.Yan
MyBatis常用11种注解 - MyBatis中文官网

MyBatis-Plus

注解 | MyBatis-Plus

任务执行、调度

@Scheduled

此注解使用在方法上,声明此方法被定时调度。使用了此注解的方法返回类型需要是Void,并且不能接受任何参数。

@Scheduled(fixedDelay=1000)
public void schedule() {

}

@Scheduled(fixedRate=1000)
public void schedulg() {

}

@Async

此注解使用在方法上,声明此方法会在一个单独的线程中执行。不同于Scheduled注解,此注解可以接受参数。使用此注解的方法的返回类型可以是Void也可是返回值。但是返回值的类型必须是一个Future。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐