zoukankan      html  css  js  c++  java
  • Spring Boot 的常用 API 说明

    1、SpringApplication 类

    作用:用于启动 Spring Boot 的程序,根据传入的类的声明的注解来决定不同的启动方式

    示例代码:

     1 package org.ranger;
     2 import org.springframework.boot.SpringApplication;
     3 import org.springframework.boot.autoconfigure.SpringBootApplication;
     4 //使用 SpringBoot 自动配置程序 
     5 @SpringBootApplication 
     6 public class Application {
     7      public static void main(String[] args) {
     8              //执行当前类,根据@SpringBootApplication 的配置,启动 SpringBoot 程序     
     9             SpringApplication.run(Application.class, args); 
    10      }
    11 }

    2、@EnableAutoConfiguration 注解

    注解的声明:

     1 @SuppressWarnings("deprecation") 
     2 @Target(ElementType.TYPE) 
     3 @Retention(RetentionPolicy.RUNTIME) 
     4 @Documented @Inherited 
     5 @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) 
     6 public @interface EnableAutoConfiguration { 
     7     String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; 
     8     Class<?>[] exclude() default {};
     9     String[] excludeName() default {};
    10 }

    作用:启动程序时,告诉 SpringApplication 启动对象使用 SpringBoot 的默认配置

    只要在 SpringBoot 项目的入口配置了 @EnableAutoConfiguration,SpringBoot 框架启动时就会自动根据你导入的 jar 包来加载 spring-boot-autoconfigure-1.5.4.RELEASE-sources.jar 中的 xxxAutoConfiguration 配置类,使用其默认配置。

    属性说明:

      exclude 属性:使用 Class 格式的方式,排除默认自动启动中不需要的配置类

           excludeName 属性:使用类的限制名的方式,排序默认自动启动中不需要的配置类

    3、@SpringBootApplication 注解

    注解说明:

     1 @Target(ElementType.TYPE) 
     2 @Retention(RetentionPolicy.RUNTIME) 
     3 @Documented 
     4 @Inherited 
     5 @SpringBootConfiguration 
     6 @EnableAutoConfiguration 
     7 @ComponentScan(excludeFilters = { 
     8     @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), 
     9     @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) 
    10 public @interface SpringBootApplication { 
    11    @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude") 
    12    Class<?>[] exclude() default {};
    13    @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName") 
    14    String[] excludeName() default {}; 
    15    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") 
    16    String[] scanBasePackages() default {}; 
    17    @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") 
    18    Class<?>[] scanBasePackageClasses() default {}; 
    19 }

      根据注解的声明可以得出:@SpringBootApplication 注解也是启动 Springboot 的默认配置。只是 在@EnableAutoConfiguration 注解的基础上增加了扫描包@ComponentScan 和 设置类为配置类 @SpringBootConfiguration 注解。实现了将给类设置为配置类、扫描指定范围的类创建对象到容器里面,并且自动加载Spring Boot默认配置。

    属性说明:

      ① basePackages 属性 @SpringBootApplication 默认扫描的范围是使用该注解的当前的类的包以及子包,如果要指定其他 范围的包,可以是 basePackages 指定。

      ② basePackageClasses 属性 用于精确指定哪些类需要创建对象加载到 Spring 容器里面。

      ③ exclude 属性 通过 Class 的方式排除不扫描的类,就是该类不创建对象。

      ④ excludeName 属性 通过类的全限制名的方式,排除不扫描的类,指定的类不会在容器中创建对象。

    4、@AutoConfigureBefore 注解

    注解说明:

      指定在 SpringBoot 框架自动配置的配置类执行完成之前,执行指定的自定义的配置类。 如果放在 Application 入口类,表示在所有自动配置的配置类还没有可以就先加载自定义的配置 类。

      @AutoConfigureBefore 注解属性:

        value:使用类的方式指定自动配置类

        name:使用类的全限制名(字符串)类指定配置类

    示例代码:

      ① 创建一个普通的类,没有任何注解

     1 package cn.mgy.utils;
     2 /** 
     3    * 创建一个没有扫描注入容器注解的类
     4    * @author ranger
     5 * */ 
     6 public class TestUtils { 
     7     /** 
     8       * 返回测试信息 
     9       * @return 
    10       */ 
    11       public String test(){ 
    12           return "-测试注入对象成功-"; 
    13       }
    14 }

      ② 创建一个自定义配置类,注入普通的类的Spring容器

     1 package cn.mgy.config;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.Configuration;
     5 
     6 package cn.mgy.config;
     7 
     8 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
     9 import org.springframework.context.annotation.Bean;
    10 import org.springframework.context.annotation.Configuration;
    11 
    12 import cn.mgy.utils.TestUtils;
    13 
    14 /**
    15  * 创建一个自定义的配置类
    16  * @author ranger
    17  *
    18  */
    19 @Configuration
    20 public class MyConfiguration {
    21     /**
    22      * 返回一个对象到容器
    23      * @return
    24      */
    25     @Bean(name="testUtils")
    26     //表示如果Spring容器有TestUtils的对象就不执行这个方法在创建一次了。
    27     @ConditionalOnMissingBean(TestUtils.class)
    28     public TestUtils getTestUtils(){
    29         TestUtils testUtils=new TestUtils();
    30         return testUtils;
    31     }
    32 
    33 }

      ③ 在入口类配置加入自定义配置类

    package cn.mgy;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.AutoConfigureBefore;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import cn.mgy.config.MyConfiguration;
    
    //使用SpringBoot自动配置程序
    @SpringBootApplication
    //在自动配置的配置类之前启动自定义的配置类
    @AutoConfigureBefore(value=MyConfiguration.class)
    public class Application {
        
        public static void main(String[] args) {
            //执行当前类,根据@SpringBootApplication的配置,启动SpringBoot程序
            SpringApplication.run(Application.class, args);
            
        }
    
    }

      ④ 在 Controller 里面使用这个注入的对象

     1 package cn.mgy.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.ResponseBody;
     7 
     8 import cn.mgy.utils.TestUtils;
     9 
    10 @Controller
    11 public class HelloController {
    12     
    13     @Autowired
    14     private TestUtils testUtils;
    15     
    16     @RequestMapping(value="/")
    17     @ResponseBody
    18     public String say(){
    19         System.out.println(testUtils.test());
    20         return testUtils.test();
    21     }
    22 
    23 }

      ⑤ 测试,成功

    5、@AutoConfigureAfter注解

      作用:指定在SpringBoot框架自动配置的配置类执行完成之后,然后执行指定的自定义的配置类。

    6、@SpringBootTest注解

    注解说明:用于使用JUnit测试SpringBoot程序,启动SpringBoot框架。测试SpringBoot一定要加上。

    示例代码:

     1 package cn.mgy.test;
     2 
     3 import java.sql.SQLException;
     4 
     5 import javax.sql.DataSource;
     6 
     7 import org.junit.Test;
     8 import org.junit.runner.RunWith;
     9 import org.springframework.beans.factory.annotation.Autowired;
    10 import org.springframework.boot.test.context.SpringBootTest;
    11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    12 
    13 @RunWith(SpringJUnit4ClassRunner.class)
    14 //如果不加该注解,无法启动SpringBoot
    15 @SpringBootTest
    16 public class DataSourceTest {
    17     
    18     @Autowired
    19     private DataSource dataSource;
    20 
    21     @Test
    22     public void dataSource() {
    23         try {
    24             System.out.println(dataSource.getConnection());
    25         } catch (SQLException e) {
    26             // TODO Auto-generated catch block
    27             e.printStackTrace();
    28         }
    29     }
    30 
    31 }
  • 相关阅读:
    【BZOJ 4581】【Usaco2016 Open】Field Reduction
    【BZOJ 4582】【Usaco2016 Open】Diamond Collector
    【BZOJ 4580】【Usaco2016 Open】248
    【BZOJ 3754】Tree之最小方差树
    【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
    【51Nod 1622】【算法马拉松 19C】集合对
    【51Nod 1616】【算法马拉松 19B】最小集合
    【51Nod 1674】【算法马拉松 19A】区间的价值 V2
    【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
    【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
  • 原文地址:https://www.cnblogs.com/maigy/p/10859480.html
Copyright © 2011-2022 走看看