springboot的一个总结


spring免XML配置技术
SPI技术
在项目的根目录META_INFO/Serveris下有个叫java.servlet.servletcontainerinitializer的文件,
文件的内容就是实现了容器规范(容器在启动时执行)的spring的一个类org.springframework.SpringServletContainerInitializer
这个类继承了servletcontainerinitializer并实现了servletcontainerinitializer接口,接口中有一个容器启动后就执行的onStartup方法。
webApplicationInitializer
若有多个的情况,则用@HandleType(WebApplicationInitializer),注解,spring会一并扫描这些类的注解成为集合类,交由spring去启动执行

那么我们就可以自义一个类去实现WebApplicationInitializer接口,并在onStartup方法里去实现
AnnotationConfigWebApplicatoinContext context=new AnnotationConfigWebApplicatoinContext();
context.register(Appconifg.class);//AppConfig实现了WebMvcConfigurationSupport类(spring的另一个配置方式,例如实现MessageConvert等,对标xml的配置方式)
注册DistpatcherServlet


spirngBoot自动配置原理

@AutoConfigurationPackpage//自动配置扫描包的路径(启动类的根目录为扫描的路径)
@Import(AutoconfigurationImportSelector.class)
public @interface EnableAutoConfiguration


//真正实现自动配置的核心
public class AutoconfigurationImportSelector implements DeferredImportSelector...{
@Override
public String[] selectImport(AnnotationMetadata annotationMetadata){
return //返回值为springBoot里面所有的javaconfiguration 类的全限定名字符串
}
}

springBoot会将AutoconfigurationImportSelector类扫描出的来类名,再根据一些
@condition注解的条件变为springBean加载到容器中。

 -------------------------------------------------------------------------------------------------------------

servletcontainerinitializer
springmvc的另一种不要xml配置的类:WebMvcConfigurationSupport
springmvc不要xml的配置类(比如配置json转换器、参数转换器):WebMvcConfigurationSupport


springboot项目如果要以war包的方式运行的话,可以
@springBootApplication注解的类继承一个SpringBootservletInitialize类,再添加EnableMVC的注解,重写 configure方法
ImportSelector接口,会返一个字符串数组,再加字符串数组里的类名加载到spring容器中。
SpringBootApplication(Exclude={排除一个类})


springboot 读取yml文件:
@component
@ConfigrurationProperties(prefix="user")
Public class User{}

@Value("")支持sple表达式

加载指定的yml
@component
@PropertySourcce("classpath:user.yml")
@ConfigrurationProperties
Public class User{}

ConditionOnXXXX
ConditionOnOnBean(A)
public class B
,在A这个Bean存在时B也在spring容器中,

@EnableConfiguratonPropterties(RegisterCOnfigProperties.class),让spring容器加载RegisterCOnfigProperties这个配置类。

SpringBoot实现json 转换器的作法是
@Bean
FastJsonHttpMessageConvert,因为springboot会扫描所有HttpMessageConvert类并放到一个集合中

springboot实现springmvc自动配置的类:WebMvcAutoConfiguration

@Component
继承接口ApplicationListener<事件>后重写onApplicationEvent方法
ApplicationContext.publishEvent()

@Bean
public TomcatServletFactory ,注入这样的一个bean后,spring就会用这个bean作为容器

@Bean
public SebServerFactoryCustomizer 获取当前的web容器并自行配置。


@springbootApplication里有@enableAutoConfiguration,@enableAutoConfiguration有@import(AutoconfigurationImportSelector)
AutoconfigurationImportSelector会将所有字串类名实(.factory文件)例化。

springBoot在内嵌web容器的情况下不会执行servlet3.0规范的ServletContainerInitializer或spring的WebApplicationInitializer接口.这时可以用spring的另一个servletContextInitializer接口并注册为bean
springBoot以war包的方式运行,
@springBootApplication()
public class App extends SpringBootServletInitializer{}

org.springframwork.boot.ApplicationRunner是在Bean工厂里,所以可以加上@Compent注解就可以执行。

ApplicationContextInitializer、SpringApplicationRunListener可将继承了这两个类的路径配置到spring.factories文件里,这个就可让springboot在启动时去执行。

内容为:

org.springframwork.context.ApplicationContextInitializer=

自已的继承了ApplicationContextInitializer的类

org.springframwork.boot.SpringApplicationRunListener=

自已的继承了ApplicationContextInitializer的类

原文地址:https://www.cnblogs.com/xuxu-dragon/p/12924604.html