zoukankan      html  css  js  c++  java
  • Spring Boot 二十个注解

    Spring Boot 二十个注解

     

    占据无力拥有的东西是一种悲哀。

      Cold on the outside passionate on the inside.

     

    背景:Spring Boot 注解的强大毋庸置疑,使用其注解可以大量减少XML 等复杂的配置文件,令Java 代码更纯,开发更简单高效,记下一些常用的Spring Boot Annotations,不包括那些在Spring Boot 使用的JPA 和MyBatis 注解。

    一、@SpringBootApplication

          @SpringBootApplication 注解用于声明自动配置,即让Spring Boot 自动为程序进行必要的配置;@SpringBootApplication 注解配置等同于@Configuration、@EnableAutoConfiguration 和@ComponentScan 三个注解的配置。

     1 import org.springframework.boot.SpringApplication;
     2 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
     3 import org.springframework.boot.autoconfigure.SpringBootApplication;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 
     7 @SpringBootApplication
     8 /*@Configuration  三者只和等同于 @SpringBootApplication 注解进行自动配置
     9 @EnableAutoConfiguration
    10 @ComponentScan*/
    11 public class JzxyApplication {
    12 
    13     public static void main(String[] args) {
    14         SpringApplication.run(JzxyApplication.class, args);
    15         
    16     }
    17 
    18 }

    二、@Contronller

          @Contronller 注解用于定义该类属于控制器类,因为在Sping Boot 项目中是由控制器负责将用户请求的URL 转发到对应的服务接口(Service 服务层),So使用其是必不可少。

     1 /**
     2  * 定义控制器类 @Controller 
     3  */
     4 @Controller
     5 @RequestMapping("/demon/linux")
     6 public class LinuxUsersController {
     7 
     8     @RequestMapping("/add/host")
     9     public Map getLinuxConn(@RequestBody List<LinuxConnEntity> list) {
    10         Map resultMap = null;
    11         return list == null
    12                 ? setResult(resultMap, Constant.ZERO, Constant.REQUEST_NULL_MSG)
    13                 : linuxUsersServiceImpl.createLinuxConn(list);
    14 
    15     }

    三、@ResponseBody

          @ResponseBody 注解表示该方法的返回结果直接写入HTTP 的Response Body 中,该注解一般在异步获取数据时使用,用于构建RESTful 的API;另外,在使用@RequestMapping 注解后返回值通常会解析为路径跳转,而在加上了@ResponseBody 注解后,返回结果则不会被解析为路径而是直接写入HTTP Response Body 中。

    1 /**
    2      * 异步获取json 数据,加上@responsebody 注解后,会直接返回json 数据
    3      */
    4     @ResponseBody
    5     @RequestMapping("/responsebody")
    6     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {
    7         return linuxUsersServiceImpl.test();
    8         9     }

    四、@RestController

    @RestController 注解用于标注控制层组件,其是@ResponseBody 和@Contronller 两个注解的集合。

     1 /**
     2  * @RestController 等价于@Controller 和 @ResponseBody 两个注解的集合
     3  */
     4 @RestController
     5 @RequestMapping("/responsebody/linux")
     6 public class LinuxUsersController {
     7 
     8     @RequestMapping("/responsebody")
     9     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {
    10         return linuxUsersServiceImpl.test();
    11         12     }

    五、@RequestMapping

    @RequestMapping 是提供路由信息的注解,其是负责URL 到Controller 中的具体函数的映射;此外,该注解后的括号内经常会使用如下六个属性:

    1. param:指定请求request 中必须包含某些参数,否则不处理该方法;

    2. header:指定请求request 中必须包含某些指定的header 值,否则不处理该方法;

    3. value:指定请求的实际地址;

    4. method:指定请求的方法method 类型,通常设计为RESTful 风格的GET、POST、PUT 和DELETE;

    5. consumes:指定处理请求提交内容的具体类型(即Content-Type),如applicatin/json 和text/html 等类型格式;

    6: produces:指定返回的内容类型,设置该属性后仅当request 请求头中的Accept 类型中包含该制定类型时才会返回,需谨慎。

    1 /**
    2      * @RequestMapping 提供路由信息的注解
    3      */
    4     @RequestMapping("/responsebody")
    5     public LinuxUserEntity testOne(LinuxUserEntity linuxUserEntity) {
    6         return linuxUsersServiceImpl.test();
    7     }

    六、@EnableAutoConfiguration

          @EnableAutoConfiguration 是Spring Boot 自动配置注解,其会根据项目中添加的依赖自动配置Spring 应用;比如Spring Boot 自动配置内嵌tomcat 的端口为8080;还有自动载入应用程序所需的所有Bean,这依赖于Spring Boot 在类路径中的查找结果,就比如你在classpath 下存在HSQLDB,并且没有手动配置任何数据库连接Bean,那么@EnableAutoConfiguration 注解就会自动配置一个内存模型(in-memory)数据库。

    七、@ComponentScan

          @ComponentScan 注解表示该类会自动发现扫描组件,若扫描到包含@Component、@Controller 和@Service 等注解的类,则会将其注册为Bean,并且可以自动收集所有的Spring 组件,包括有@Configuration 注解标注的类;开发中经常使用@ComponentScan 注解搜索Beans,并结合@Autowired 注解将Beans 注入,若没有进行配置,则Spring Boot 只会扫描SpringBootApplication 启动类所在包下及其子包下的使用了@Service、@Repository 等注解的类。

    八、@Configuration

          @Configuration 注解作用类似于传统的xml 配置文件;例如,有第三方库需要用到xml 文件,则可以通过添加@Configuration 注解表示该类作为项目的配置主类,然后使用@ImportResource 注解加载xml 配置文件内容。

    九、@Import

    @Import 注解作用是导入其它配置类。

    十、@ImportResource

    @ImportResource 注解作用是加载xml 配置文件。

    十一、@Autowired

          @Autowired 注解的作用是自动导入依赖的Bean;即把配置好的Bean 拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作;并且当加上标签(required=false)时,就算找不到bean 也不报错,允许注入为空。

    十二、@Service

    @Service 注解的作用是标志某类为Service 层,是Service 服务层组件注解。

    十三、@Repository

          @Repository 注解作用是标志某类为数据层,其可用于确保DAO 层或者Repositories 能正常转译;当@Repository 注解修饰DAO 或者repositories 类时会被ComponentScan 发现并配置。

    十四、@Bean

          @Bean 注解相当于XML 配置文件中使用的<bean>标签,初始化的时候创建对象,并交由IOC 容器管理;需要注意的是@Bean 注解是放在方法的上面,而不是类,意思是产生一个bean,并交给spring 管理。

    十五、@Value

    @Value 注解作用是注入Spring Boot 配置文件application.properties,即获取application.properties 配置文件中属性的值。

    1 @Value(value = "#{VEHIVLE_TOPIC}")
    2     private String VEHIVLE_TOPIC;

    十六、@inject

    @inject 注解作用与@Autowired 相同,不同的是其没有require 属性,强制要求注入不能为空。

    十七、@Component

    @Component 注解泛指组件,即当组件不方便归类时,可以使用该注解进行标注归类。

    十八、@Qualifier

          @Qualifier 注解用于当有多个同一类型的Bean 时,通过@Qualifier(“name”) 根据名字来指定注入的Bean;其需要配合@Autowired 使用,根据名字进行注入,进行更细粒度的控制如何选择要注入的Bean。

    十九、@Resouce

          @Resouce 注解的作用与@Autowired 相似,都是自动注入依赖的Bean;不同的是@Resource(name=”name”,type=”type”) 多了括号内的属性,当没有括号内内容的话,默认byName。

    二十、@PathVariable

    @PathVariable 注解的作用是获取路径变量。

     1 /**
     2      * @RequestMapping 获取路径变量
     3      */
     4     @RequestMapping("/ioc/get/{address}")
     5     public String testOne(@PathVariable String address ) {
     6         /**
     7          * 获取得到路径中address 的值
     8          */
     9         return address;
    10     }

    占据无力拥有的东西是一种悲哀。

      Cold on the outside passionate on the insede.

     

  • 相关阅读:
    879. 盈利计划 力扣 动态规划 难
    js 在浏览器中使用 monaco editor
    py 时间处理
    Xpath in JavaScript
    js 拖拽排序
    JavaScript如何获取网页的宽高,以及如何兼容(各种坑详解)
    JavaScript删除对象的某个属性的方法
    CSS渐变知识
    如何选定搭建个人独立博客工具
    Codeforces Round #714 (Div. 2) 题解(A-D)
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/11656409.html
Copyright © 2011-2022 走看看