spring-boot的常见的注解使用

Spring Boot是Spring框架对“约定优于配置(Convention Over Configuration)”理念的最佳实践产物。一个典型的Spring Boot应用本质上就是一个基于Spring框架的应用。Spring Boot使用注解的方式对Bean和配置进行收集,注册,分析和组装。简化了基于XML配置文件的开发。能够快速地构建出一个应用程序。
--------------------- 
作者:xiaolongleee 
来源:CSDN 
原文:https://blog.csdn.net/mytobaby00/article/details/81141620 
版权声明:本文为博主原创文章,转载请附上博文链接!

1、@ComponentScan的功能其实就是自动扫描并加载符合条件的组件或Bean定义,并最终将这些Bean定义加载到容器中。其作用是:

      *自动扫描路径下边带有@Controller,@Service,@Repository,@Component注解加入Spring IoC容器。
      *通过includeFilters加入扫描路径下没有以上注解的类加入spring容器。
      *通过excludeFilters过滤出不用加入spring容器的类。
2、@Conditional:在Spring框架中,我们可使用@Conditional配合@Configuration或者@Bean等注解来干预一个配置或者Bean定义是否生效,要实现基于条件的配置,我们只需要通过@Conditional指定自己的Condition实现类就可以了:

@Conditional({TheCondition1.class, TheCondition2.class, ...})

 3、在实现自动配置的过程中,除了基于条件配置,我们还需要提供配置或组件加载的顺序,从而让这些配置或者组件之间的依赖分析和组装可以顺利完成。

      *@AutoConfigureBefore让当前配置或组件在某个组件之前运行。

      *@AutoConfigureAfter让当前配置或组件在某个组件之后运行。

4、在Spring Boot中,有些变量需要根据需要配置在application.properties中,那我们可以通过@Value注解读取这些变量并注入。该注解可以注入:

       *普通字符串:@Value("This is a normal string") private String normalString;
       *操作系统属性:@Value("#{systemProperties['os.name']}") private String osName;
       *表达式结果:@Value("#{ T(java.lang.Math).random() * 20.0 }") private double theNum;
       *文件资源:@Value("classpath:WEB-INF/spring.properties") private Resource resourceFile;
       *URL资源:@Value("http://www.baidu.com") private Resource baiduUrl;
       *其他Bean属性:@Value("#{otherBean.thatProperty}") private String propertyFromOtherBean;
5、@PropertySource

         *@PropertySource用于读取指定目录下的文件,并加载。如:

         *@PropertySource(value = {"classpath:system-config.properties"},encoding="utf-8")

6、@Autowired是Spring 3.0引入的一个注解,可以标注在类的属性上,这样Spring容器就会以byType的方式来注入对应的Bean。

       如果某个Type实现了多个Bean,则使用@Autowired时,需要根据@Qualifier注解来指定需要注入哪个实现类。也可以采用List或Map的方式将所有实现类一起注入。如果注入的是Map,则key为该Bean的id。
7、@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。

      @Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为Bean的名字,而type属性则解析为Bean的类型。所以:

           *如果使用name属性,则使用byName的自动注入策略.
           *而使用type属性时则使用byType自动注入策略。
           *如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

8、@Component用于将类实例化并注入IoC中。其他注解@Controller@Service@Respository的用法跟@Component差不多,比@Component带有更多的语义,他们分别对应了控制层业务层持久层的类。

9、@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 该注解有六个属性:

       *params:指定request中必须包含某些参数值是,才让该方法处理。
       *headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
       *value:指定请求的实际地址,指定的地址可以是URI Template 模式
       *method:指定请求的method类型, GET、POST、PUT、DELETE等
       *consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
       *produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

10、@RequestParam该注解用在方法的参数前面。其作用就是获取request.getParameter(方法参数)的值,并将取得的·值付给该参数。

11、@ResponseBody:使用@ResponseBody表示该方法的返回结果直接·写入HTTP response body中

12、@RequestBody用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

猜你喜欢

转载自blog.csdn.net/qq_39158126/article/details/84316097