spring全家桶系列之spring boot 2.2-基礎功能(二)

註解

  • @Configuration

  • spring的配置的時候使用此註解

  • @Configuration(proxyBeanMethods=false)配置爲jdk動態代理,沒有實現的接口所以false

  • 注意spring boot 2.2版本可以使用proxyBeanMethods=false

  • 代理模式spring會自動選擇也可以直接使用@Configuration

  • 你不需要把所有的@Configuration東西都放在一個班級裏(班級舉例),@Import註釋可以用於導入額外的配置類。
  • 或者,您可以使用 @ComponentScan自動獲取所有Spring組件,包括 @Configuration類。

  • @EnableAutoConfiguration

  • 默認開啓@SpringBootApplication包含,自動裝配配置類

  • @EnableAutoConfiguration(exclude={排除的配置類.class})

  • 如果發現正在應用您不需要的特定自動配置類,則可以使用exclude屬性@EnableAutoConfiguration禁用

  • 例如替換默認DataSourceAutoConfiguration.class 數據配置

  • @Import 

  • 導入的類必須是@Configuration配置類,@Import註釋可以用於導入額外的配置類。

  • 例如這個配置類獲取另一個配置類消息

  • @ComponentScan

  • 默認開啓會掃描WebApplication類所屬包,例如:WebApplication在com.cn下掃描com.cn

  • @Component 

  • 單例模式 自動裝配Bean:在自動檢測的組件的情況下將變爲Spring bean

  • @Bean

  • 單例模式 註冊Bean:@Bean 需要在配置類中使用,即類上需要加上@Configuration註解

  • 第三方庫中的組件裝配到你的應用中,在這種情況下,是沒有辦法在它的類上添加@Component註解的

  • @ImportResource

  • 註釋來加載配置文件例如:@ImportResource("classpath:test.xml")

項目啓動控制檯打印

//CommandLineRunner或ApplicationRunner

@Component
public class Test implements CommandLineRunner {
    
    @Override
    public void run(String... args) throws Exception {
        System.out.println("----我想打印的內容爲123----");
    }
}

申請退出

  • 每個都SpringApplication註冊一個與JVM的關閉鉤子,以確保 ApplicationContext在退出時正常關閉。可以使用所有標準的Spring生命週期回調(例如DisposableBean接口或@PreDestroy註釋)。
  • 此外,org.springframework.boot.ExitCodeGenerator 如果bean 在SpringApplication.exit()調用時希望返回特定的退出代碼,則可以實現該接口。然後可以傳遞此退出代碼System.exit()以將其作爲狀態代碼返回,如以下示例所示:
  • @SpringBootApplication
    public class ExitCodeApplication {
    
        @Bean
        public ExitCodeGenerator exitCodeGenerator() {
            return () -> 42;
        }
    
        public static void main(String[] args) {
            System.exit(SpringApplication.exit(SpringApplication.run(ExitCodeApplication.class, args)));
        }
    
    }

    Spring Boot 配置文件相關

  • 配置隨機值

  • my.secret=${random.value}
    my.number=${random.int}
    my.bignumber=${random.long}
    my.uuid=${random.uuid}
    my.number.less.than.ten=${random.int(10)}
    my.number.in.range=${random.int[1024,65536]}

    自定義配置

  • @Getter
    @Setter
    @ConfigurationProperties(prefix = "project.security")//配置前綴
    @EnableConfigurationProperties(SecurityProperties.class)
    public class SecurityProperties {
        // 免認證靜態資源路徑
        private String[] anonResourcesUrl;
        //超時時間默認1小時
        private Duration sessionTimeout = Duration.ofHours(1);
        //超時時間默認5分鐘
        private Duration redisTimeout = Duration.ofMinutes(5);
        //超時時間默認1小時
        private int cookieTimeout = 60 * 60;
        //登錄地址
        private String loginUrl;
        //退出地址
        private String logoutUrl;
    
    }
    #自定義配置
    project:
      security:
        #免認證靜態資源路徑
        anon-resources-url: /error,/login,/logout,/other/**
        #登錄地址
        login-url: /login
        #退出地址
        logout-url: /logout
        #一小時
        session-timeout: PT1H
        #3600秒
        cookie-timeout: 3600
        #5分鐘
        redis-timeout: PT5M

    讀取配置文件信息 ( 以下靜態方法不能讀取)

  • public class Test {
        @Autowired
        private SecurityProperties securityProperties;
        
        @Value("${project.logout-url}")
        private String url;
      
        public void test() {
            System.out.println(securityProperties.getLogoutUrl());
            System.out.println(url);
        }
    }

    靜態方法讀取

  • public class Test {
    
        private static int cookieTimeout;
    
        private static void getProperties() {
            try {
                Properties properties = new Properties();
                InputStream stream = CookiesUtils.class.getClassLoader().getResourceAsStream("application.yml");
                properties.load(stream);
                String property = properties.getProperty("cookie-timeout");
                cookieTimeout = Integer.valueOf(property);
            } catch (IOException e) {
            }
        }
    
        public static void test() {
            getProperties();
            System.out.println(cookieTimeout);
        }
    }
    

    屬性中的佔位符

  • #tocmat
    server:
        session:
          #獲取其它配置信息的值
          timeout: ${project.security.session-timeout}
    #自定義配置
    project:
      security:
        #一小時
        session-timeout: PT1H
        

     

  • 下一篇: Spring MVC

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章