Spring Boot常用注解

注解速览

配置加载相关

注解名 作用范围 作用
@SpringBootApplication
@Configuration 表明该类是一个基于 Java 显式装配的 Spring 配置类
@ComponentScan 启用组件扫描,让 Spring 自动发现并注册组件类
@EnableAutoConfiguration
@ContextConfiguration

Bean 声明注解

注解名 作用范围 作用
@Component 表明该类是一个组件类,由 Spring 为该类创建 Bean
@Repository

Bean 注入注解

注解名 作用范围 作用
@Autowired
@Resource
@Inject
@Qualifier

SpringMVC 注解

注解名 作用范围 作用
@Controller 表明该类是 SpringMVC 中 的控制层组件
@RestController 该类中方法直接将字符串作为Web响应返回
@Service 表明该类是 SpringMVC 中 的业务层组件
@RequestMapping 类、方法 将 Web 请求映射到对应路径的方法上进行处理。<br />类:该控制器中所有方法都会继承 value 属性指定的路径。<br />方法:映射的路径会继承标注在类上的路径。
@RequestParam
@PathVariable
@RequestBody
@ResponseBody
@ControllerAdvice 将类内部@ExceptionHandler@InitBinder@ModelAttribute标注的方法应用到所有@RequestMapping标注的方法上。
@ModelAttribute 方法、方法参数 方法:该方法会添加一个或多个属性到 Model 上。<br />参数:该方法的参数值由 Model 中取得。

MyBatis 注解

注解名 作用范围 作用
@Param 方法参数 Mapper 方法传入多个参数时给参数指定别名
@Select 方法 标注方法执行该 SQL 语句
@Insert 方法 同上
@Update 方法 同上
@Delete 方法 同上

配置加载相关

  • @SpringBootApplication:SpringBoot的核心注解,开启了组件扫描和自动配置,实际上它是将@Configuration@ComponentScan@EnableAutoConfiguration三个注解组合在了一起。
  • @Configuration:表明该类是一个基于 Java 显式装配的 Spring 配置类。
    <div></div>
  • <span id="@ComponentScan">@ComponentScan</span>:启用组件扫描,让 Spring 自动发现并注册组件类( Web 控制器类及被@Component标注的其他组件类)。默认扫描与配置类相同的包。
    @ComponentScan("com.test")@ComponentScan(basePackages={"com.test", "com.dev"})设置需要扫描的包。
  • @EnableAutoConfiguration:开启 Spring Boot 的自动配置特性。
  • @ContextConfiguration(classes=TestConfig.class):表明该类需要在TestConfig类中加载配置

Bean 声明注解

  • @Component:组件类,由 Spring 为该类创建 Bean。
  • @Repository:数据访问层组件(DAO)

Bean 注入注解

  • @Autowired:Spring 提供的自动装配 Bean 的注解。默认按类型装配,默认情况要求依赖对象必须存在。
    可应用在构造器、属性的 Setter ()及其他方法上,自动装配匹配的 Bean。
    若要按名称装配,需结合@Qualifier("name")一起使用。

  • @Resource:JDK1.6支持的装配注解,默认按名称装配,名称可由name属性指定。
    未指定name属性时,若注解写在字段上默认取字段名,若注解写在setter方法上默认取属性名,当没有与名称匹配的bean时再按类型进行装配;如果指定了name属性,只会按名称装配。

  • @Inject:Java 依赖注入规范的注解,作用近似@Autowired

  • @Qualifier("name"):限定符,自动装配时指定要注入的 Bean 名称。

Bean 初始化及销毁

  • @Bean:表明该方法返回的对象会由 Spring 注册为一个 Bean。默认的 Bean 都是单例的。
    @Bean("name")对生成的 Bean 命名。
    @Bean(initMethod="init",destroyMethod="destory"):指定 Bean 的初始化和销毁方法,在构造函数执行后执行初始化方法,在 Bean 销毁前执行销毁方法。
  • @PostConstruct:表明在构造函数执行后执行被标注的方法。
  • @PreDestroy:表明在 Bean 销毁前执行被标注的方法。
  • @DependsOn:定义 Bean 初始化及销毁时的顺序。
  • @Primary:当自动装配有多个匹配的 Bean 时,被标注的 Bean 将作为首选,若无标注则抛出异常。
  • @Lazy(true):延迟初始化

Bean 条件化装配

  • @Profile("dev"):应用在类、方法级别上,表明在对应的 profile 文件处于激活状态时才会进行 Bean 装配。
    通过设置 spring.profiles.activespring.profiles.default 这两个属性来确定哪个 profile 文件处于激活状态。
  • @ActiveProfiles("dev"):指定运行测试时要激活的 profile 文件。

SpringMVC 注解

  • @Controller:表明该类是 SpringMVC 中 的控制层组件,是一个处理 HTTP 请求的控制器,该类中所有被@RequestMapping标注的方法都会用来处理对应URL的请求

  • @RestController:一种 Web Controller 注解,表明该类中方法直接将字符串作为Web响应返回,效果同@ResponseBody

  • @Service:表明该类是 SpringMVC 中 的业务层组件

  • @RequestMapping:该注解将 Web 请求映射到对应路径的方法上进行处理,可被标注在类或方法上。

    @RequestMapping(value = "/code", method = POST)中,value 属性指定方法所要处理的请求路径;method 属性指定所处理的 HTTP 方法,method 属性为空时,默认处理 GET 方法。

    标注在类时,表明该控制器中所有方法都会继承 value 属性指定的路径。

    标注方法时,映射的路径会继承标注在类上的路径,将访问路径的 HTTP 请求交给被标注的方法处理。

  • @RequestParam("id"):标注在方法参数前,将请求中的变量绑定到方法参数上(参数形式:/query?id=123),该注解默认使用,可不配置。
    若请求中无对应参数,可采用defaultValue属性设置默认值。

  • @PathVariable("id"):标注在方法参数前,通过在@RequestMapping路径中添加占位符{},从而将请求路径中的变量绑定到方法参数上(参数形式:/query/{id})。
    若占位符名称与方法参数名相同,可去掉value属性:

    @RequestMapping(value = "/query/{id}", method = GET)
    public String queryById(@PathVariable int id) {
      // ...
    }
    
  • @RequestBody:作用于方法参数,根据HTTP Request Header的 content-Type 的内容,将接收到的 Request 对象的 body 数据经过适当的 HttpMessageConverter 转换为 Java 类。

  • @ResponseBody:直接将字符串作为Web响应(Reponse Body)返回。根据HTTP Request Header的 Accept 的内容,将标注方法返回的对象经过适当的 HttpMessageConverter 转换为指定格式后,写入到Response对象的body数据区。(默认将对象转换为JSON字符串返回)

  • @ControllerAdvice:标注在类上。

    将类内部@ExceptionHandler@InitBinder@ModelAttribute标注的方法应用到所有@RequestMapping标注的方法上。

    该类中各个注解的行为:

    • @ModelAttribute:在@RequestMapping注解方法执行之前,把标注方法的返回值放入 Model 中
    • @InitBinder:在@RequestMapping注解方法执行之前,初始化数据绑定器
    • @ExceptionHandler:当@RequestMapping注解方法抛出UnauthenticatedException异常时执行标注方法

    参考:Spring3.2新注解@ControllerAdvice

  • @ModelAttribute:可被标注在方法或方法参数上。

    标注在方法上

    表明该方法会添加一个或多个属性到 Model 上。在 Controller 接收到请求调用@RequestMapping标注方法之前,会先调用当前 Controller 中全部的@ModelAttribute标注方法。

    @ModelAttribute标注在@RequestMapping标注方法上时,方法返回值将被解释为 Model 的一个属性,而非一个视图名。

    @ModelAttribute标注方法通常用来填充一些公共的属性或数据,如下拉列表的预设状态、宠物的类型,或是去取前端表单渲染所需的对象,如 Account

    标注方式:

    • 通过方法返回值默认添加属性(未显示指定属性名时将设置默认值):

      @ModelAttribute
      public Account addAccount(@RequestParam String number) {
          return accountManager.findAccount(number);
      }
      
    • 方法接收一个 Model 对象,向其中添加属性:

      @ModelAttribute
      public void populateModel(@RequestParam String number, Model model) {
          model.addAttribute(accountManager.findAccount(number));
          // add more ...
      }
      

    标注在参数上:

    表明该方法的参数值由 Model 中取得,若未取到则实例化该参数并添加到 Model 中,请求中所有名称匹配的数据都会绑定到该参数中。

    以下面的代码为例:

    @RequestMapping(path = "/accounts/{account}", method = RequestMethod.PUT)
    public String save(@ModelAttribute("account") Account account) {
        // ...
    }
    

    该方法中 Account 类型的实例可能来自于:

    • 因为@SessionAttributes标注的使用已经存在于 Model 中
    • 在同个控制器中使用了@ModelAttribute方法已经存在于 Model 中
    • 由URI模板变量和类型转换中取得的
    • 调用了自身的默认构造器被实例化出来的

    URI模板变量和类型转换:

    该例中,Model 属性的名称("account")与URI模板变量的名称相匹配。如果配置了将String类型的账户值转换成Account类型实例的转换器Converter<String, Account>,就可以实现自动转换,不需要再额外写一个@ModelAttribute方法。

    数据绑定:

    WebDataBinder类将与 Model 属性名称匹配的查询参数和表单字段等请求参数进行类型转换后绑定到对应的属性上。

    进行数据绑定时可能会出现一些错误,若想检查这些错误,可以在标注@ModelAttribute的参数紧跟着声明一个BindingResult参数:

    @RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
    public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {
        if (result.hasErrors()) {
            return "petForm";
        }
        // ...
    }
    

    参考:Spring MVC @ModelAttribute详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容