zoukankan      html  css  js  c++  java
  • Spring Boot 常用注解

    @Configuration

    在 Java 配置中,我们用一个 java 配置去代替 Spring 中 applicationContext.xml, 这时,就需要使用注解 @Configuration:

    @Configuration
    public class JavaConfig{
        @Bean
        SayHello sayHello(){
            return new SayHello();  
        }
    }
    

    使用注解 @Configuration表示这个类是一个配置类,它的作用相当于 applicationContext.xml 。

    然后定义方法,方法返回对象,方法上添加@Bean 注解,表示将这个方法的返回值注入到 Spring 容器中。也就是说,@Bean 对应的方法,就相当于 applicationContext.xml 中的 bean 节点。

    @Service

    如果希望将一个类自动注册到 Spring 容器中,那么可以给这个类添加一个注解 @Service .

    和 @Service 注解功能类似的注解,一共有四个:

    • @Component
    • @Repository
    • @Service
    • @Controller

    这四个中,其他三个都是基于 @Component 做出来的,源码基本一致,功能也是一致的。

    为什么要区分出来,主要是为了在不同的类上面添加时方便:

    • 在 Service 层上,添加注解,使用 @Service
    • 在 Dao 层上,添加注解时,使用 @Repository
    • 在 Controller 层上,添加注解时,使用 @Controller
    • 在其他组件上添加注解时,使用 @Component

    @ComponentScan

    通过注解 @ComponentScan 指定要扫描的包:

    @ComponentScan(basePackages = "com.example.demo")
    

    这表示扫描 com.example.demo 下所有的 Bean。

    @Autowired

    注解 @Autowired 的作用是对象注入。自动扫描的对象注入有三种方式:

    • @Autowired
    • @Resources
    • @Injected

    如果一个对象只有一个实例,则用 @Autowired ,如果一个对象有多个实例,则用 @Resources ,或者 @Autowired + @Qualifier 结合起来使用。

    @Profile

    @Profile 是条件注解,可以用于多环境切换。

    如:

    @Bean
    @Profile("dev") // 使用开发环境
    DataSource devDataSource(){
     ...
    }
    

    @RequestMapping

    这个注解用来标记一个请求 URL ,如:

    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    这里的 @RequestMapping("/hello") 表示当请求地址为 /hello 时,这个方法会被触发。

    @RequestMapping 还可以用于请求窄化(给请求添加一个前缀),示例:

    @RestController
    @RequestMapping("/api")
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello(){
            return "hello";
        }
    }
    

    这个时候访问 hello ,地址就应该是:http://localhost:8080/api/hello.

    @GetMapping

    @GetMapping用于将 HTTP get 请求映射到特定处理程序的方法注解。具体来说,@GetMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写。

    如下面两行是等价的:

    @RequestMapping(method = RequestMethod.GET, value = "/hello2")
    @GetMapping("/hello2")
    

    @GetMapping 可以看作是 @RequestMapping 的一个细分,自 Spring 4.3 版本,引入了如下 5 个注解。

    • @GetMapping,
    • @PostMapping、
    • @PutMapping、
    • @DeleteMapping
    • @PatchMapping,

    @RestController

    注解 @RestController = @Controller + @ResponseBody,一般用在类上,表示将这个类自动注册到 Spring 容器中,并且该类下的所有方法都会返回 JSON 格式的数据。

    @ResponseBody,一般是使用在单独的方法上的,需要哪个方法返回json数据格式,就在哪个方法上使用,具有针对性。

    @RequestParam

    当服务端的接口变量名和前端不一致时,可以使用注解 @RequestParam 来接解决,等价于 request.getParam,示例:

     @ResponseBody
        @RequestMapping("login")
        public String login(@RequestParam("name") String username,
                            @RequestParam("password") String password) {
         
       }     
    

    这表示用 username 来接收前端传来的 name 参数。

    @Param 用于 DAO 层(也就是 Mapper 层),是 mybatis 中的注解。使得 mapper.xml 中的参数与后台的参数对应上,也增强了可读性。示例:

    @Mapper
    @Repository
    public interface UserMapper {
        @Select("SELECT * FROM user where username=#{username} and password=#{password}")
        User login(@Param("username") String username,@Param("password") String password);
    }
    

    @PropertySource

    通过注解 @PropertySource 来引入相关配置,进行属性注入。

    每一个参数使用 @Value("${xxx.xx}") 形式进行注入。

    @Component  // 注入到 Spring 容器中
    @PropertySource(value = {"classpath:book.properties"}, encoding = "UTF-8") // 自动加载 book.properties 文件
    public class Book {
        @Value("${book.id}")
        private Integer id;
        @Value("${book.name}")
        private String name;
        @Value("${book.author}")
        private String author;
     ...
    }
    

    @ConfigurationProperties

    @ConfigurationProperties 注解会将 Spring 容器中对应的数据注入到对象对应的属性中,就不用通过 @Value 注解挨个注入了。

    @Component  // 注入到 Spring 容器中
    @PropertySource(value = {"classpath:book.properties"}, encoding = "UTF-8") // 自动加载 book.properties 文件
    @ConfigurationProperties(prefix = "book") // 类型安全的属性注入,不再使用 @Value注解 挨个注入
    public class Book {
        private Integer id;
        private String name;
        private String author;
     ...
    }
    

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    大小写英文字母表
    JSP作业
    第六次作业
    第五次作业
    第二次作业
    JSP第一次作业
    作业9
    作业八
    作业7
    第二次作业
  • 原文地址:https://www.cnblogs.com/youcoding/p/13491641.html
Copyright © 2011-2022 走看看