1. 程式人生 > >spring boot 知識點整理

spring boot 知識點整理

在一個@Configuration註解的類裡面,用@Bean去註解需要例項化的類,@Configuration和@Bean是spring 3.0之後開始支援的一組新註解,實現自動裝配,從而可以支援完全無XML配置。如下形式:

1、下面是根據條件裝配bean


2、如何自定義starter

@Configuration一般被用來初始化配置,有兩種方法可以使帶有@Configuration的類被初始化,一為讓把類所在包的路徑納入scanBasePackages,這樣就進入了Spring的掃描範圍;還有一種方法就是在spring.factories中用org.springframework.boot.autoconfigure.EnableAutoConfiguration=類的全路徑名,這樣在專案啟動的時候SpringFactoriesLoader會初始化spring.factories(包括引入的jar包中的)中配置的類。在spring.factories配置的好處就是,如果我們想開發一個jar把供其他人使用,那麼我們就在自己工程的spring.factories中配置@@Configuration類,這樣只要其他人在他們專案的POM中加入了我們開發的jar包作為依賴,在他們專案啟動的時候就會初始化我們開發的工程中的類。初識Spring Boot框架(二)之DIY一個Spring Boot的自動配置


 

3、如何自定義初始化

實際應用中,我們會有在專案服務啟動的時候就去載入一些資料或做一些事情這樣的需求。 有5種方式可以實現這個需求

為了解決這樣的問題,Spring Boot 為我們提供了一個方法,通過實現介面 CommandLineRunner 來實現。很簡單,只需要一個類就可以,無需其他配置。 建立實現介面 CommandLineRunner 的類,根據控制檯結果可判斷,@Order 註解的執行優先順序是按value值從小到大順序

自定義初始化過程


4、spring Aware

講解:bean 和spring是無耦合的,但是如果想用到spring容器的功能資源,就要你的bean知道spring的存在,這就是spring aware


5、條件註解@Conditional


6、@Enable*註解工作原理

 

 


10、Spring MVC

@requestBody 用於方法引數中接受前端傳遞過來的json資料,不返回view

@responseBody 用於返回前端json資料

@requestParam HTTP請求的引數

@requestHeader 對於HTTP請求頭的引數

@pathVariable 路徑請求引數

@ModelAttribute 通常作用在control的某個方法上,此方法會首先被呼叫,並將方法的而結果作為model的屬性,然後再呼叫對應的control處理方法,常用於baseAction類中接受httpserverrequest等

springMVC4中獲取request和response物件有以下兩種簡單易用的方法:

1、在control層獲取

 1)通過方法引數直接在action類中獲取

   public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){

      /**  相關業務程式碼   此時可以直接使用request response物件 */

   }

2)利用spring web提供的@ModelAttribute註解

2、通過spring提供的RequestContextHolder在非contrller層獲取request和response物件

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();

下面所講解的都是配置在MyMVCConfig

通過實現WebApplicationInitializer 等同於web.xml配置

基本配置

spring MVC的定製配置需要我們配置整合一個WebMvcConfigurerAdapter,並在此使用@EnableWebMvc註解,來開啟對spring MVC配置支援

靜態資源

重寫addResourceHandlers方法實現

攔截器配置

 

類似servlet的Filter

 

可以讓普通bean 實現HanlderIntercepetor介面或者繼承HandlerInterceptorAdapter類來實現自定義攔截器

在boot中通過重寫WebMvcConfigurerAdapter 的 addInterceptors方法來註冊自定義攔截器

@ControllerAdvice

 

@ExceptionHandler定義全域性處理 ,通過value屬性可以設定攔截過濾條件

在開發中經常會遇到跳轉頁面的事情,我們還要單獨寫一個方法很麻煩,現在可以這樣

 

 

路徑引數配置

在spring mvc中路徑引數如果帶點“.” ,那點後面的值將被忽略。通過重寫configurePathMatch(PathMatchConfigurer) 可不忽略 點後引數

 

檔案上傳

demo集合

 

1、@SpringBootApplication 和入口

 

這個標籤是個組合註解,包含了@Configuration @EnableAutoConfiguration @ComponentScan三個標籤

@EnableAutoConfiguration 讓spring boot根據類路徑中的jar包依賴為當前專案進行自動配置

在spring boot中我們可以使用

@Value("${book.author}")直接注入屬性,但是還是感覺一個個注入麻煩啊,SO,我們可以直接對映一個類,用@ConfigurationProperties(prefix="author",locations={"classpath:author.properties"})通過prefix指定字首,通過locations指定位置


2、spring boot 的web開發

 

需要定義模版資訊的話,使用ViewResolver  ,別忘了在config上加註解@EnableWebMvc

 

[java] view plain copy

  1. @Bean  
  2.   
  3. public InternalResourceViewResolver viewResolver() {  
  4.   
  5. InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
  6.   
  7. resolver.setPrefix("WEB-INF/classes/views/");  
  8.   
  9. resolver.setSuffix(".jsp");  
  10.   
  11. resolver.setViewClass(JstlView.class);  
  12.   
  13. return resolver;  
  14.   
  15. }  

靜態資源預設放在src/main.resources/static 下面


3、靜態首頁的支援


4、接管spring boot 的web配置

 

如果boot 提供的配置不是我們需要的,可以通過配置類修改,

註解來實現自己完全控制

@Configuration

@ComponentScan("com.ecej.test.mvc")

@EnableWebMvc

如果我們想即用預設配置,又增加自定義配置,可以整合WebMvcConfigurerAdapter,無需使用@EnableWebMvc註解


5、註冊servlet Filter Listener  @servletComponentScan作用

在springbootApplication上註冊@servletComponentScan註解後,@webLister註解自動註冊,無需其他程式碼

或者可以註冊ServletRegistrationBean  FilterRegistrationBean  ServletListenerRegistrationBean 的bean來實現


6、Tomcat配置

其實就是servlet容器配置,因為BOOT內建的是tomcat,所以也就叫tomcat配置了

配置都在org.springframework.boot.autoconfigure.web.ServerProperties 中(其實大部分都有這麼個配置)

SO,我們只需要在application.properties中配置就好了(如果你想擁別的名字,只需要配置下就行咯,在上邊有提到過)。通用的配置都以server作為字首

例子:

配置容器

server.port=8080

server.session-timeout=2

配置tomcat

server.tomcat.uri-encoding=UTF-8

上邊都是配置檔案配置,如果想玩玩程式碼也是可以的,下面介紹程式碼配置

想配置servlet容器可以實現一個EmbeddedServletContainerCustomizer的介面(注意宣告的類要為static)

想直接配置tomcat等則可以直接定義TomcatEmbeddedServletContainerFactory等

 

 

11、快取支援

不同的快取技術,需要不同的cacheManager


12、非同步訊息

spring 對JMS和AMQP的支援分別來自於spring-jms 和spring-rabbit

他們分佈需要ConnectionFactory來實現連線訊息代理,並分別提供了JmsTemplate、RabbitTemplate

spring為JMS 、AMQP提供了@JmsListener @RabbitListener 註解在方法上監聽訊息代理髮布的訊息。我們只需要分別通過@EnableJms @EnableRabbit開啟支援