springboot

@Component

@ConfigurationProperties(prefix="person")

publicclassPerson{


}

需要添加依賴才有提示

dependencies{

?? optional "org.springframework.boot:spring-boot-configuration-processor"

}

properties亂碼問題

@Value和@ConfigurationProperties取值的不同

@ConfigurationProperties@Value

功能批量注入配置的屬性值一個(gè)一個(gè)指定

松散語法(下劃線轉(zhuǎn)和字母大寫變量名可識(shí)別)支持不支持

SpEL不支持支持

JSR303數(shù)據(jù)校驗(yàn)支持不支持

@PropertySource和@ImportSource

@PropertySource(value={"classpath:xxx.properties"}),加載另外的配置文件

@ImportResource(locations={"classpath:xxx.xml"}):導(dǎo)入Spring的配置文件,用在配置類上

xml文件替換成配置類

@Configuration

publicclassMyAppConfig{

//<bean></bean>將方法的返回值添加到容器中,容器中該組件的默認(rèn)id就是方法名

@Bean

publicHelloServicehelloService(){

returnnewHelloService();

?? }

}

配置文件占位符

${random.uuid}

${user.name:默認(rèn)值}

profiles標(biāo)識(shí)

不同環(huán)境可以使用不同的配置文件

application.properties

spring.profiles.active=dev? #激活dev環(huán)境的配置

application-dev.properties

springboot配置文件加載順序

file:./config/

file:./

classpath:./config/

classpath:/

優(yōu)先級(jí)由高到低,高的會(huì)覆蓋低的

自動(dòng)配置原理

1)、Springboot啟動(dòng)時(shí)加載主配置類,@SpringBootApplication中啟用了自動(dòng)配置@EnableAutoConfiguration

2)、在@EnableAutoConfiguration中用@Import(AutoConfigurationImportSelector.class)導(dǎo)入組件

3)、在AutoConfigurationImportSelector類中有一個(gè)selectImports方法

4)、在getAutoConfigurationEntry中調(diào)用getCandidateConfigurations從springfactory加載工廠

5)、loadFactoryNames中返回loadFactoryNames從FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";讀取EnableAutoConfiguration.class的內(nèi)容包裝成properties對(duì)象

根據(jù)不同的條件判斷決定該配置類是否生效

?

@Configuration//這是一個(gè)配置類

@EnableConfigurationProperties(HttpProperties.class)//啟用制定類的ConfigurationProperties功能

@ConditionalOnWebApplication(type=ConditionalOnWebApplication.Type.SERVLET)//spring底層@Conditional注解,根據(jù)不同的條件,如果滿足條件該配置類生效

@ConditionalOnClass(CharacterEncodingFilter.class)//判斷當(dāng)前項(xiàng)目有沒有這個(gè)類

@ConditionalOnProperty(prefix="spring.http.encoding",value="enabled",matchIfMissing=true)//判斷配置文件是否存在這些配置,matchIfMissing如果不存在還是返回true

publicclassHttpEncodingAutoConfiguration{

?

? ? privatefinalHttpProperties.Encodingproperties;

?

? ? publicHttpEncodingAutoConfiguration(HttpPropertiesproperties) {

? ? ? ? this.properties=properties.getEncoding();

? ? }

?

? ? @Bean//給容器中添加這個(gè)組件

? ? @ConditionalOnMissingBean//判斷容器中沒有這個(gè)組件時(shí)

? ? publicCharacterEncodingFiltercharacterEncodingFilter() {

? ? ? ? CharacterEncodingFilterfilter=newOrderedCharacterEncodingFilter();

? ? ? ? filter.setEncoding(this.properties.getCharset().name());

? ? ? ? filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));

? ? ? ? filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));

? ? ? ? returnfilter;

? ? }

?

? ? @Bean

? ? publicLocaleCharsetMappingsCustomizerlocaleCharsetMappingsCustomizer() {

? ? ? ? returnnewLocaleCharsetMappingsCustomizer(this.properties);

? ? }

?

? ? privatestaticclassLocaleCharsetMappingsCustomizerimplements

? ? ? ? ? ? WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>,Ordered{

?

? ? ? ? privatefinalHttpProperties.Encodingproperties;

?

? ? ? ? LocaleCharsetMappingsCustomizer(HttpProperties.Encodingproperties) {

? ? ? ? ? ? this.properties=properties;

? ? ? ? }

?

? ? ? ? @Override

? ? ? ? publicvoidcustomize(ConfigurableServletWebServerFactoryfactory) {

? ? ? ? ? ? if(this.properties.getMapping()!=null) {

? ? ? ? ? ? ? ? factory.setLocaleCharsetMappings(this.properties.getMapping());

? ? ? ? ? ? }

? ? ? ? }

?

? ? ? ? @Override

? ? ? ? publicintgetOrder() {

? ? ? ? ? ? return0;

? ? ? ? }

?

? ? }

?

}

自定義錯(cuò)誤信息繼承DefaultErrorAttributes重寫getErrorAttributes方法調(diào)用super.getErrorAttributes將自己的錯(cuò)誤信息寫入map返回將map放入request域取出異常處理器中的信息(Map<String,Object>)requestAttributes.getAttribute("ext",0);

嵌入式servlet

修改tomcat配置

注冊(cè)servlet(localhost:8080/myServlet)

@Bean

publicServletRegistrationBeanmyServlet(){

ServletRegistrationBeanservletbean=newServletRegistrationBean(newMyServlet(),"/myServlet");

returnservletbean;

}

注冊(cè)filter

@Bean

publicFilterRegistrationBeanmyFilter(){

? ? FilterRegistrationBeanfilterbean=newFilterRegistrationBean();

? ? filterbean.setFilter(newMyFilter());//注冊(cè)過濾器

? ? filterbean.setUrlPatterns(Array.asList("/hello","/myServlet"));//過濾url

? ? returnfilterbean;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容