springBoot

    科技2025-05-04  37

    文章目录

    认识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> <!--对springboot项目打jar使用,与maven默认的打包有区别--> <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"); // registry.addViewController("/user/gh").setViewName("hello"); } //格式转换器,把前端传递的参数,转成我们指定的格式,日期转换,对全局生效 @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); } }
    Processed: 0.011, SQL: 8