• 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的类

  • 相关阅读:
    第06组 每周小结 (1/3)
    第06组 Beta冲刺 总结
    第06组 Beta冲刺(5/5)
    爬虫第六次作业
    第06组 Beta冲刺 (4/5)
    第06组 Beta冲刺 (3/5)
    第06组 Beta冲刺 (2/5)
    《机器学习》第二次作业——第四章学习记录和心得
    软工实践个人总结
    第09组 每周小结 (3/3)
  • 原文地址:https://www.cnblogs.com/xuxu-dragon/p/12924604.html
Copyright © 2020-2023  润新知