springboot笔记

@SpringBootApplication:表示这个类是SpringBoot的主应用类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。

@Configuration:表示配置类,意思就是,如果这个类的某个方法上加了@Bean标签,那么这个方法的返回值可以作为bean组件加入到IOC容器中去。

@EnableAutoConfiguration:表示开启自动配置生效。

springboot的自动配置

@EnableAutoConfiguration标签将类路径下spring-boot-autoconfigure包下META-INF/spring-factories中的所有EnableAutoConfiguration的值加入到IOC容器中。

截取部分EnableAutoConfiguration的值:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
//省略一部分......
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
//省略一部分......

以HttpEncodingAutoConfiguration(Http编码自动配置类)为例,打开这个类。

@Configuration
@EnableConfigurationProperties({HttpEncodingProperties.class})
@ConditionalOnWebApplication
@ConditionalOnClass({CharacterEncodingFilter.class})
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
    private final HttpEncodingProperties properties;

    public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
        this.properties = properties;
    }

    @Bean
    @ConditionalOnMissingBean({CharacterEncodingFilter.class})
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name());
        filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
        filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
        return filter;
    }

    @Bean
    public HttpEncodingAutoConfiguration.LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() {
        return new HttpEncodingAutoConfiguration.LocaleCharsetMappingsCustomizer(this.properties);
    }

    private static class LocaleCharsetMappingsCustomizer implements EmbeddedServletContainerCustomizer, Ordered {
        private final HttpEncodingProperties properties;

        LocaleCharsetMappingsCustomizer(HttpEncodingProperties properties) {
            this.properties = properties;
        }

        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (this.properties.getMapping() != null) {
                container.setLocaleCharsetMappings(this.properties.getMapping());
            }

        }

        public int getOrder() {
            return 0;
        }
    }
}

首先@Configuration表示这是一个配置类,而且HttpEncodingAutoConfiguration有一个HttpEncodingProperties类型的 properties属性,再看characterEncodingFilter()方法可知,这个方法加了@Bean,返回一个CharacterEncodingFilter类型的组件加入到IOC,而返回的对象filter要用到properties当中的属性,所以HttpEncodingProperties必须先变成组件。@EnableConfigurationProperties()使得配置文件中的属性注入到
HttpEncodingProperties中,从而使得HttpEncodingProperties变成组件,然后就可以用properties对象中的属性了。

打开HttpEncodingProperties可以看到它头上的@ConfigurationProperties(prefix ="spring.http.encoding")注解。故,所有能在配置文件(.yml或.properites文件)中配置的属性就是XXXProperties类中的属性(比如这里的例子HttpEncodingProperties)

springboot静态资源的存放位置

静态资源顺序

静态资源的访问顺序如上图所示:

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/
  4. classpath:/public/

如果开发者使用IDEA创建springboot项目,就会默认创建 classpath:/static/目录,那么一般把静态资源放在这个目录下即可。

# Java  spring 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×