在上篇文章中咱們瞭解到Spring Boot 的一些經常使用的外部化配置,在本篇中咱們將會繼續對類的配置進行了解css
在 Spring Boot 中的約定大於配置 與 自動裝配使咱們能夠沒必要去像以往同樣配置各個框架之間的依賴與注入,可是有時Spring Boot 提供給咱們的默認配置並不能徹底知足咱們的需求,所以個性化的配置或者叫自定義裝配內容便爲咱們提供了這種便利。
這裏咱們以一個簡單的在Spring Boot 中自定義錯誤頁面的例子作爲展現:web
@Configuration public class ErrorPageConfig { @Bean public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){ return new MyCustomizer(); } private static class MyCustomizer implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, "/403")); container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404")); } } }
EmbeddedServletContainerCustomizer 正如名字同樣 - 嵌入式Servlet容器定製器,咱們經過對其方法的覆蓋從新達到了自定義錯誤頁面的效果。
固然 若是使用的是Spring MVC 的話咱們也可使用 Spring MVC 提供的@ExceptionHandler方法和@ControllerAdvice。ErrorController進行異常的捕捉與錯誤信息頁面的定製。 spring
備註:
@Configuration:表示這個類可使用 Spring IoC 容器做爲 bean 定義的來源。
@Bean :告訴 Spring,這是一個bean對象,該對象應該被註冊爲在 Spring 應用程序上下文中的 bean。mongodb
這裏以Spring Security 做爲演示:shell
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomAuthenticationProvider customAuthenticationProvider; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(customAuthenticationProvider); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/reg", "/login", "/css/**", "/js/**", "/img/**", "/music/**", "/plugins/**", "/upload/**", "/api/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .defaultSuccessUrl("/") .permitAll() .and() .logout() .permitAll(); // 默認狀況下,CSRF保護已啓用。你必須配置包含_csrf令牌的全部的網頁來工做。 // 你能夠隨時禁用CSRF保護。若是在代碼中配置: 解決post請沒法提交 http .csrf().disable(); //in a frame because it set 'X-Frame-Options' to 'DENY'. http .headers() .frameOptions() .sameOrigin(); } }
在通常狀況下咱們要對Spring Boot 集成的一些框架作些自定義配置時, 能夠去實現 對應框架的XXXConfigurerAdapter,而後經過EnableXXX註解進行修飾 以後用 Configuration 註解修飾,最後對其方法進行覆蓋從而到達自定義配置的目的,固然具體的配置仍是需求去翻閱對應的文檔說明來了解。數據庫
Starter POMs是能夠包含到應用中的一個方便的依賴關係描述符集合。你能夠獲取全部Spring及相關技術的一站式服務,而不須要翻閱示例代碼,拷貝粘貼大量的依賴描述符。例如,若是你想使用Spring和JPA進行數據庫訪問,只須要在你的項目中包含spring-boot-starter-data-jpa依賴,而後你就能夠開始了。編程
該starters包含不少你搭建項目,快速運行所需的依賴,並提供一致的,管理的傳遞依賴集。api
名字有什麼含義:全部的starters遵循一個類似的命名模式:spring-boot-starter-,在這裏是一種特殊類型的應用程序。該命名結構旨在幫你找到須要的starter。不少IDEs集成的Maven容許你經過名稱搜索依賴。例如,使用相應的Eclipse或STS插件,你能夠簡單地在POM編輯器中點擊ctrl-space,而後輸入"spring-boot-starter"能夠獲取一個完整列表。spring-mvc
下面的應用程序starters是Spring Boot在org.springframework.boot組下提供的:tomcat
spring-boot-starter 核心 POM,包含自動配置支持、日誌庫和對 YAML 配置文件的支持。
spring-boot-starter-amqp 經過 spring-rabbit 支持 AMQP。
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 來支持面向切面編程(AOP)。
spring-boot-starter-batch 支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 來支持 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 來支持 MongoDB。
spring-boot-starter-data-rest 經過 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 倉庫。
spring-boot-starter-jdbc 支持使用 JDBC 訪問數據庫。
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含經常使用的測試所需的依賴,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支持使用 Velocity 做爲模板引擎。
spring-boot-starter-web 支持 Web 應用開發,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支持使用 Tomcat 開發 WebSocket 應用。
spring-boot-starter-ws 支持 Spring Web Services。
spring-boot-starter-actuator 添加適用於生產環境的功能,如性能指標和監測等功能。
spring-boot-starter-remote-shell 添加遠程 SSH 支持。
spring-boot-starter-jetty 使用 Jetty 而不是默認的 Tomcat 做爲應用服務器。
spring-boot-starter-log4j 添加 Log4j 的支持。
spring-boot-starter-logging 使用 Spring Boot 默認的日誌框架 Logback。
spring-boot-starter-tomcat 使用 Spring Boot 默認的 Tomcat 做爲應用服務器。
關於Spring Boot 經常使用的一些配置方式作了一個簡要的介紹,從這些配置中咱們也能夠看到Spring Boot 爲咱們提供的各類默認配置的好處,當咱們不須要這些默認值時,咱們有兩種經常使用的覆蓋方式:1.經過 application.yml文件進行定義。2.經過實現對應的ConfigurerAdapter,並託管給Spring 容器來進行定義。