文章目录
认识springboot框架springboot简单原理认识springboot的目录结构启动类认识相关的加载配置部署springboot项目WebMvcConfigurer接口进行springMVC扩展使用
认识springboot框架
解决ssm框架的繁琐配置文件,其实是spring框架的深入的应用,把ssm框架中的习惯性的配置信息作为了默认的预配置。是一个spring技术的全家桶。整个web开发的技术栈基本都做了支持。
springboot简单原理
创建的springboot项目,是从spring-boot-starter-parent父工程继承来的。(父工程统一了各种依赖的版本)springboot官方提供了各种组件的启动器starter。web启动器,即把web开发需要用到的各种依赖做集成.(jar,配置文件),
比如web启动器:web开发需要依赖springMVC,spring-web,spring的核心包,jackson等各种jar包;web开发的默认配置类:WebMvcAutoConfiguration类中做了springMVC相关的预配置bean,比如RequestMappingHandlerMapping,静态资源,视图映射,json消息转换器等各种web层的bean对象。 在第三方框架,要往springboot框架中集成使用,需要提供自定义启动器。比如:Druid-spring-boot-starter,mybatis-spring-boot-starter。
springboot的预配置类(官方启动器的预配置都在spring-boot-autoconfiguration/META-INF/spring.factories中key为org.springframework.boot.autoconfigure.EnableAutoConfiguration),当加入对应的starter后,对应的配置类生效。第三方的启动器类的jar包一般都带有自定义的配置类。 springboot的启动器:(starter):配置了某个技术栈需要用到各种依赖jar包,以及配置类信息。
认识springboot的目录结构
src/main/java:放java类src/main/resources/static:放静态资源,js,css,图片src/main/resources/templates:放视图模板(html中使用模板引擎的语法,比如jsp,比如freemarker,比如thymeleaf)application.properties:默认配置文件(配置服务器端口,部署路径,tomcat优化信息,数据库url,username,password等信息)
启动类认识
@SpringBootApplication
@SpringBootConfiguration:表明该类是一个spring风格的配置类@ComponentScan:开启包扫描,具体的扫描路径由EnableAutoConfiguration来做配置。@EnableAutoConfiguration
@AutoConfigurationPackage:配置包扫描路径,获取当前启动类的包名作为扫描范围。@Import({AutoConfigurationImportSelector.class}):通过配置类选择器,去所有jar包的META-INFO/spring.factories文件中查找key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,这些值统统都是候选的配置类。
SpringApplication.run(Application.class, args)
初始化spring容器,加载配置类(当前类)确定当前项目类型:(servlet项目)错误分析器:初始化21个内置的错误分析器对象,把框架运行中产生的异常信息输出为可阅读的信息。Banner: Banner printedBanner = this.printBanner(environment);容器初始化: context = this.createApplicationContext()
自定义的配置类放在启动类的同级或下级包下能生效;放在上级包不生效。是因为自动配置的包扫描路径是启动类的包名。
相关的加载配置
@PropertySource("classpath:jdbc.properties") // 加载自定义properties配置文件
@ImportResource("classpath:spring.xml") // 加载自定义的spring风格的xml配置文件
@Import(MyAnnotationConfig.class) // 加载自定义的spring风格的配置类
这些注解是写在配置类中的,任何一个配置类中都可以。
配置信息以Application开头的文件,会自动加载。
加载自定义的properties文件
通过PropertySource指定自定义文件的位置。在任何一个bean对象中使用@Value注解获取properties文件中的数据。自定义的配置信息可以放在默认的application.properties或者自定义的properties都可以,无非取数据可以通过@Value取单个数据或通过@ConfigurationProperties注解指定前缀批量获取数据。
默认的配置文件两种格式:yml和properties
properties中:集合:逗号分隔多个数据,数值:直接数字,map:key=value
yml:yml文件的优先级低于properties文件,写法是以缩进表示层级关系。大小写敏感。冒号后面的数据必须加空格。
配置文件可以放的位置:
项目下/config
项目下
项目下/resources/config
项目下/resources
部署springboot项目
打jar包,通过java -jar指令运行jar包。打war包,把war放在服务器下的指定应用服务器tomcat,weblogic目录下。
指定war指定war包名把自带的tomcat启动器的scope指定为provided,不参与打包从SpringBootServletInitializer接口重写configure方法,指定程序的入口。
<groupId>com.javasm
</groupId>
<artifactId>0827boot
</artifactId>
<version>0.0.1-SNAPSHOT
</version>
<packaging>war
</packaging>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-tomcat
</artifactId>
<scope>provided
</scope>
</dependency>
<build>
<finalName>0827boot
</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder builder
) {
return builder
.sources(Application
.class);
}
public static void main(String
[] args
)
{
SpringApplication app
= new SpringApplication(Application
.class);
app
.setBannerMode(Banner
.Mode
.OFF
);
app
.run(args
);
}
}
WebMvcConfigurer接口进行springMVC扩展使用
addCorsMappings方法添加的跨域支持,在拦截器中需要对预检请求放行。
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry
) {
registry
.addViewController("/gh").setViewName("hello");
registry
.addViewController("/ul").setViewName("user/userlist");
}
@Override
public void addFormatters(FormatterRegistry registry
) {
registry
.addConverter(new MyDateConverter());
}
@Override
public void addInterceptors(InterceptorRegistry registry
) {
registry
.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/user/**","/role/**");
}
@Override
public void addCorsMappings(CorsRegistry registry
) {
registry
.addMapping("/**").allowedHeaders("*").allowedMethods("*").allowedOrigins("*").allowCredentials(true);
}
}