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的主要内容,如果未能解决你的问题,请参考以下文章
初识OpenGL 片段着色器(Fragment Shader)