spring boot 知識點整理
在一個@Configuration註解的類裡面,用@Bean去註解需要例項化的類,@Configuration和@Bean是spring 3.0之後開始支援的一組新註解,實現自動裝配,從而可以支援完全無XML配置。如下形式:
1、下面是根據條件裝配bean
2、如何自定義starter
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
- @Bean
- public InternalResourceViewResolver viewResolver() {
- InternalResourceViewResolver resolver = new InternalResourceViewResolver();
- resolver.setPrefix("WEB-INF/classes/views/");
- resolver.setSuffix(".jsp");
- resolver.setViewClass(JstlView.class);
- return resolver;
- }
靜態資源預設放在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開啟支援