1.初识springboot

Posted 结构化思维wz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.初识springboot相关的知识,希望对你有一定的参考价值。

一、java搭建ssm环境

1.搭建web环境

2.导入相关依赖

3.创建配置类包 config

3.1 SpringConfig

/**
*这个配置类相当于applicationContext.xml
*/
@Configuration  //标识配置类
@ComponentScan(basePackages = "com.wangze",userDefaultFilter = true,excludeFilters = {@ComponentScan.Filter(type= FilterType.ANNOTATION,class=Controller.class)})  //扫描除@controller的注解
public class SrpingConfig{
    
}

3.2 SpringMvcConfig

/**
*这个配置类相当于springmvc的配置文件
*/
@Configuration  //标识配置类
@ComponentScan(basePackages = "com.wangze",userDefaultFilter = false,includeFilters = {@ComponentScan.Filter(type= FilterType.ANNOTATION,class=Controller.class)}) //扫描@Controller注解
public class SpringMvcConfig{
    
}

3.3 WebInit

/**
*这个配置类相当于web.xml   需要添加servelet依赖(新版)
*/
public class WebInit extends WebApplicationInitializer{
    @Override
    public void onStartup(javax.servlet.ServletContext)throws ServletException{
        //加载springmvc配置文件
       AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebAppLicationContext();
        ctx.register(SpringMvcConfig.class);
        // 添加 DispatcherServlet
        servletContext.addServlet("springmvc",new DispatcherServlet(ctx));
        // 给 DispatcherServlet 添加路径映射
        springmvc.addMapping("/");
    }
    
}

3.4 注意

	由于我们在 WebInit 中只是添加了 SpringMVC 的配置,这样项目在启动时只会去加载 SpringMVC 容器,而不会去加载 Spring 容器,如果一定要加载 Spring 容器,需要我们修改 SpringMVC 的配置,在 SpringMVC 配置的包扫描中也去扫描 @Configuration 注解,进而加载 Spring 容器,还有一种方案可以解决这个问题,就是直接在项目中舍弃 Spring 配置,直接将所有配置放到 SpringMVC 的配置中来完成,这个在 SSM 整合时是没有问题的,在实际开发中,较多采用第二种方案,第二种方案,SpringMVC 的配置如下:
### 
@Configuration
@ComponentScan(basePackages = "com.wangze")
public class SpringMVCConfig {
}
这种方案中,所有的注解都在 SpringMVC 中扫描,采用这种方案的话,则 Spring 的配置文件就可以删除了。

4.其他配置

4.1 静态资源过滤

在 Java 配置的 SSM 环境中,如果要配置静态资源过滤,需要让 SpringMVC 的配置继承 WebMvcConfigurationSupport ,进而重写 WebMvcConfigurationSupport 中的方法,如下:

@Configuration
@ComponentScan(basePackages = "com.wangze")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/");
    }
}
重写 addResourceHandlers 方法,在这个方法中配置静态资源过滤,这里我将静态资源放在 resources 目录下,所以资源位置是 classpath:/ ,当然,资源也可以放在 webapp 目录下,此时只需要修改配置中的资源位置即可。如果采用 Java 来配置 SSM 环境,一般来说,可以不必使用 webapp 目录,除非要使用 JSP 做页面模板,否则可以忽略 webapp 目录。

4.2 视图解析器

  • 添加依赖

  • 在配置类中继续重新方法

  • @Override
        protected void configureViewResolvers(ViewResolverRegistry registry) {
            registry.jsp("/jsp/", ".jsp");
        }
    

4.3 Json

  • 添加依赖(无额外需求)

	SpringMVC 可以接收JSON 参数,也可以返回 JSON 参数,这一切依赖于 HttpMessageConverter。

	HttpMessageConverter 可以将一个 JSON 字符串转为 对象,也可以将一个对象转为 JSON 字符串,实际上它的底层还是依赖于具体的 JSON 库。

	所有的 JSON 库要在 SpringMVC 中自动返回或者接收 JSON,都必须提供和自己相关的 HttpMessageConverter 。

	SpringMVC 中,默认提供了 Jackson 和 gson 的 HttpMessageConverter ,分别是:MappingJackson2HttpMessageConverter 和 GsonHttpMessageConverter 。

	正因为如此,我们在 SpringMVC 中,如果要使用 JSON ,对于 jackson 和 gson 我们只需要添加依赖,加完依赖就可以直接使用了。具体的配置是在 AllEncompassingFormHttpMessageConverter 类中完成的。

	如果开发者使用了 fastjson,那么默认情况下,SpringMVC 并没有提供 fastjson 的 HttpMessageConverter ,这个需要我们自己提供,如果是在 XML 配置中,fastjson 除了加依赖,还要显式配置 HttpMessageConverter,
 @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        converter.setFastJsonConfig(fastJsonConfig);
        converters.add(converter);
    }

5.总结

主要是springmvc的配置,spring配置比较简单@Bean而已

springboot

一、介绍

  • 简化spring环境的搭建
  • 内嵌tomcat,不需要打包成war包
  • starter
  • 自动配置
  • 很多生产功能
  • 没有代码生成,不需要xml配置

二、创建方式

1.官网线上创建

2.IDEA创建

3.Maven创建

三、启动类详解

1.@Configuration注解

@SpringBootConfiguration实际上就是@Configuration

# @Configuration 是@Component的衍生注解
# 区别: spring默认启动会加载一些处理器,其中包括ConfigurationPostProcessor专门处理带有@Configuration注解的。
# 使用@Configuration 会被代理,已经创建的对象不会重复创建
# 使用@Component 不会被代理

2.@EnableAutoConfiguration

开启自动配置

3.@ComponentScan

开启默认包扫描(同级和下级)建议放在根包下

4.总结分析(源码)

在这里插入图片描述

  • @SpringBootConfiguration = @Configuration

  • @EnableAutoConfiguration
    
    ----------------------------
    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {
        String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    
        Class<?>[] exclude() default {};
    
        String[] excludeName() default {};
    }
    
    # @Import 注解:在原生spring framework中,组件(bean)装配有三个阶段:
    	1.@Component
    	2.@Configuration + @Bean
    	3.模块装配 @EnableXXX +@Import 
    	使用方式:使用@Enablexxx 会自动注册Import中的组件
    			直接导入配置类
    			定义一个selector,返回数组/对象,数组/对象里放实例的名字(springboot使用这种方法)
    			
    
  • @ComponentScan

  • @ComponentScan(
        excludeFilters = {@Filter(
        type = FilterType.CUSTOM,
        classes = {TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {AutoConfigurationExcludeFilter.class}
    )}
    )
    // 提供自定义
    

四、maven 项目结构

1.聚合项目与非聚合项目的区别

  • 聚合工程 :几个子模块聚合在一起形成一个项目。每个项目不能独立运行,不能独立打包。需要从parent下打包。(pom中加module)
  • 非聚合项目:无models,可分别打包

实践:在微服务项目中,每一个module都是独立系统,各自独立,不需要加modules

2.版本号管理

不管有没有modules都可以进行版本管理

<properties>
    定义各种版本号
</properties>
<dependencyManagenent>
	统一管理
</dependencyManagenent>

五、maven 工程resource

六、parent

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

功能:

  • 定义java的编译版本
  • 定义项目的编码格式
  • 定义依赖的版本号
  • 打包的配置
  • 自动化资源过滤
  • 自动化的插件配置

maven是单继承的,公司一般会定义自己的parent,就无法继承springboot的。

解决办法:公司的继承springboot;

以上是关于1.初识springboot的主要内容,如果未能解决你的问题,请参考以下文章

Java初识方法

springboot 初识

初识OpenGL 片段着色器(Fragment Shader)

初识OpenGL 片段着色器(Fragment Shader)

初识springboot

初识OpenGL (-)纹理(Texture)