SpringBoot
文章目录
Spring
个人笔记,可供参考,本文也有很多细节缺少,
一、SpringBoot是什么?
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 (官网) Spring Boot使您可以轻松地创建独立的、生产级的、基于Spring的应用程序,您可以“只是运行”。 我们对Spring平台和第三方库有一个独到的见解,这样您就可以从最少的麻烦开始了。大多数Spring引导应用程序只需要很少的Spring配置。
特征
- Create stand-alone Spring applications
创建独立的Spring应用程序 - Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
直接就嵌入了Tomcat,jetty或 Undertow (不需要部值 WAR文件) - Provide opinionated ‘starter’ dependencies to simplify your build configuration
提供固定的“starter”依赖以简化构建配置 都是以starter的开头的名字的配置 starter.XXX. - Automatically configure Spring and 3rd party libraries whenever possible
尽可能自动配置Spring和第三方库 能自动加载的都自动加载 - Provide production-ready features such as metrics, health checks, and externalized configuration
提供了生产的监控,就比如内存,运行状况和外部化配置 - Absolutely no code generation and no requirement for XML configuratio
完全没有代码生成 没有对xml文件的要求 配置spring的xml的配置可以全部不用 spring新版就不需要了
二、普通实例Hello world
- spring官网 点击 Super quick — try the Quickstart Guide. 超级快速入门
- Spring Quickstart Guide 快速入门指南
- 点击 start.spring.io 开始快速创建
- 选择自己的版本 选择相应的依赖 点GENERATE下载项目 然后直接用idea打开
- 在SpringbootDemoApplication编写
@GetMapping("/hello") public String hello(@RequestParam(value = "realName",defaultValue = "World")String name){ return String.format("hello %s",name);//注意学习format } }
6. 推荐运行方式右键运行
三、idea直接创建springboot
1.直接new project 选择 spring initializar 选择自己对应的版本
2.选择依赖关系 这是我个人需要的依赖 这些依赖已经够对mysql1的增删改查了
下一步
四、注解实例
**@SpringBootApplication(Spring Boot 应用程序)
有了它项目就可以运行起来,因为他相当于3个注解的功能 @Configuration、@EnableAutoConfiguration、@ComponentScan
**@SpringBootConfiguration(Spring Boot 配置)
@Configuration
**@EnableAutoConfiguration (启用自动配置)
让Spring Boot根据类路径中的jar包依赖(META-INF/spring.factories)为当前项目进行自动配置。(告诉Spring Boot根据类路径设置,其他bean和各种属性设置开始添加bean。)比如,添加了spring-boot-starter-web这个基础依赖,Spring Boot会自动添加tomcat和Spring MVC的依赖,并且自动对他们进行配置。
EnableAutoConfiguration 通过@Import 注入AutoConfigurationImportSelector.class AutoConfigurationImportSelector.class 实现的接口————》DeferredImportSelector.class(延迟导入选择器)————》 继承了ImportSelector.class (导入选择器)所以是ImportSelector的子类 可以重写selectImports方法(选择注入)--》 selectImports()方法-》 调用了getAutoConfigurationEntry()方法 (获取自动配置条目)--》通过他调用了getCandidateConfigurations()(获取候选配置) --》SpringFactoriesLoader.loadFactoryNames()获取配置的名称地址翻到数组里面 --》 去 META-INF下面找spring.factories 文件 读取文件中的配置路劲
jar包的结构
**@ComponentScan(组件扫描)
组件扫描,可自动发现和装配一些Bean 等同于
<context:component-scan base-package="com.aaa.ssm.service"></context:component-scan>
- 原码待扒
五、常用注解spring总结
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据
。
@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解
@Service:一般用于修饰service层的组件
@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
@RequestMapping 提供路由信息,负责URL到Controller中的具体函数的映射。
@RestController:
用于标注控制层组件(如struts中的action,springmvc的controller),@ResponseBody和@Controller的合集。它继承自@Controller注解。spring4.0之前的版本,Spring MVC的组件都使用@Controller来标识当前类是一个控制器servlet。使用这个特性,我们可以开发REST服务的时候不需要使用@Controller而专门的@RestController。当你实现一个RESTful web services的时候,response将一直通过response body发送。为了简化开发,Spring 4.0提供了一个专门版本的controller。
@Bean 用@Bean标注方法等价于XML中配置的bean。
@Value 注入Spring boot application.properties配置的属性的值。
@AutoWired 自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。
@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
@Resource(name=”name”,type=”type”):没有括号内内容的话,默认byName@Autowired干类似的事。
六、SpringApplication.run源码解析:
- List item
七、springboot整合mybatis
1)添加依赖(最新spring-boot2.5.2+mybatis-spring-boot-starter 2.2.0)
根据自己对应的数据库添加pom 或者
选择依赖的时候mysql8版本可以按我的选择就可以了
2)添加 application.properties
#链接数据库四要素
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:/tab_account?serverTimezone=GMT%2B8&yesSSL=false
spring.datasource.username=root
spring.datasource.password=04161220
#端口号
server.port=18888
#工程名 可以不设置默认 /
#server.servlet.context-path=/bu
#mybatis实体别名配置
mybatis.type-aliases-package=com.aaa.springboot_mybatis_demo_20211213.entity
#mapper文件扫描
mybatis.mapper-locations=classpath:mapper/*.xml
#tomcat编码
server.tomcat.uri-encoding=UTF-8
3),编写dao及mapper
4),编写service及实现类
5),编写controller
6),编写页面
7),@MapperScan(“com.aaa.sb.dao”)
提示包名不要用下划线
八、yaml简介and配置
简介:
YAML是一个可读性高,用来表达数据序列化的格式。 YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲。
数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。
server.port
spring.datasource.username
- 字串不一定要用双引号标识;
- 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);
- 允许在文件中加入选择性的空行,以增加可读性;
- 在一个档案中,可同时包含多个文件,并用“——”分隔;
- 选择性的符号“…”可以用来表示档案结尾
在springboot中使用:
#yml 和properties 同时存在时 yml 优先加载
# yml 和properties 同时存在时 yml 优先加载 #配置本项目的启动(访问)端口号 server: port: 18888 servlet: context-path: /sbm spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/tab_account?serverTimezone=GMT%2B8&yesSSL=false username: root #如果密码全部是数字的必须加单引号 password: '04161220' mybatis: #实体类所做包 type-aliases-package: com.aaa.springboot_mybatis_demo_20211213.entity #mapper.xml所在位置 mapper-locations: classpath:mapper/*.xml
RequestBody 不支持的问题,解决:
1,pom.xml添加包
com.alibaba
fastjson
1.2.46
2,创建配置类config.HttpConverterConfig 复制下面内容:
@Configurationpublic class HttpConverterConfig { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { // 1.定义一个converters转换消息的对象 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); // 2.添加fastjson的配置信息,比如: 是否需要格式化返回的json数据 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); // 3.在converter中添加配置信息 fastConverter.setFastJsonConfig(fastJsonConfig); // 4.将converter赋值给HttpMessageConverter HttpMessageConverter<?> converter = fastConverter; // 5.返回HttpMessageConverters对象 return new HttpMessageConverters(converter); }}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?