SpringBoot框架定义
Spring Boot 是一个基于 Spring 框架的轻量级开发框架,它可以帮助开发者快速创建、配置和部署基于 Spring 的应用程序。
Spring Boot简化了 Spring 应用程序的开发和部署流程,让开发者可以更专注于业务开发,而不必过多关注底层技术和配置。
SpringBoot框架特点
Spring Boot 的特点:
- 简单易用:Spring Boot 可以快速创建和部署应用程序,使得开发者可以更专注于业务逻辑的实现。
- 自动配置:Spring Boot 可以根据项目的依赖自动配置应用程序,开发者不必手动进行配置。
- 微服务支持:Spring Boot 提供了一些微服务相关的特性,例如基于 HTTP、REST、WebSocket 的通信、服务发现和注册等。
- 组件化:Spring Boot 可以将应用程序划分为不同的模块,每个模块都是一个组件,可以独立开发、测试和部署。
- 健康检查:Spring Boot 提供了健康检查功能,可以监测应用程序的运行状况,帮助开发者快速发现和解决问题。
SpringBoot框架入门案例
第一步:创建项目,首先在左上角的file->new->project。
如下图所示:
第二步:SpringBoot初始化,选择左侧的Spring Initializer。
如下图所示:
第三步:添加项目名称信息,选择JDK安装版本,以及填写项目名称和本地存储路径。
如下图所示:
第四步:选择Maven依赖,选择依赖Spring Web,其他依赖看需要勾选。
如下图所示:
第五步:一路Next,最后完成项目。
然后点击Next,最后Finish项目创建完成,Springboot目录结构如下图所示:
SpringBoot框架配置文件
Spring Boot配置文件格式,主要包括:properties和yaml。
1.properties格式
properties文件格式是key=value的形式,一般用于配置简单的属性。
在Spring Boot中,可以通过在application.properties
文件中设置属性来配置应用程序。
示例如下:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=123456
2.YAML文件格式
在Spring Boot中,可以通过在application.yml
文件中设置属性来配置应用程序。
YAML文件格式是基于缩进的层级结构,相对于properties文件更加灵活和易读。
示例如下:
# 服务端口号 server: port: 8080 # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # MyBatis配置 mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true # 日志配置 logging: level: root: info com.example: debug
在YAML文件中,每个属性都必须对齐,并且不能使用tab键进行缩进。
3.SpringBoot配置文件
SpringBoot项目启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件。
比如:下面我以application.properties配置文件为例,application.properties可以放置四个位置,优先级从1到4依次递减。
file:./config/ ( 项目根路径下的config文件夹) file:./ (项目根路径) classpath:/config/ (类路径下的config文件夹) classpath:/ (类路径)
如下图所示:
优先级由高到底,高优先级的配置会覆盖低优先级的配置。
所以说,我们平时通过IDEA创建的SpringBoot工程在resource目录下自动生成的配置文件,优先级最低。
SpringBoot常用注解
我们开发任何一个Spring Boot项目,都会用到如下的启动类:
这里就会涉及到SpringBoot注解,我们点击这个注解,如下图所示:
@SpringBootApplication我标出来的这三个注解,是非常重要的。
分别是:
- @SpringBootConfiguration;
- @ComponentScan;
- @EnableAutoConfiguration;
自动配置@EnableAutoConfiguration
Spring Boot自动配置注解,开启这个注解之后,此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
组件扫描@ComponentScan
组件扫描其实很简单,@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。
比如:
@ComponentScan(“com.mikechen.test”) @SpringBootApplication public class SpringbootApplication {
这么做扫描的范围扩大到整个父包com.mikechen.test包。
@ComponentScan注解默认就会装配标识了:
- @Controller
- @Service
- @Repository
- @Component
@Service注解
@Service注解用于类上,标记当前类是一个service类。
比如:
@Service("courseDAO") @Scope("prototype") public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{ ... }
@Repository注解
用于标注数据访问组件,即DAO组件,使用@Repository注解可以确保DAO或者repositories提供异常转译。
具体示例,如下:
@Repository public class UserDaoImpl implements UserDao{ @Override public int insertUser(){ JdbcTemplate template = new JdbcTemplate(); ... } }
@Component注解
@component是spring中的一个注解,它的作用就是实现bean的注入。
@RestController注解
在一个类上添加@Controller注解,表明了这个类是一个控制器类,类似struts中的action。
具体示例如下:
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/test") public Map addGoodsToCartList(Long itemId, Integer num) { Map map = new HashMap(); map.put("success", true); map.put("message", "welcome"); return map; } }
SpringBoot框架整合
1.引入依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.添加配置文件
配置文件主要包含:服务器地址、端口、密码、连接池最大连接、最大最小空闲连接等信息。
详细的配置如下:
# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=mikechen # 连接池最大连接数(使用负值表示没有限制) 默认 8 spring.redis.lettuce.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 spring.redis.lettuce.pool.max-wait=-1 # 连接池中的最大空闲连接 默认 8 spring.redis.lettuce.pool.max-idle=8 # 连接池中的最小空闲连接 默认 0 spring.redis.lettuce.pool.min-idle=0 #超时时间,单位为毫秒 spring.redis.timeout=30000
3.创建 RedisTemplate 对象,并注入到需要使用 Redis 的类中
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); return template; } }
4.在需要使用 Redis 的类中使用 RedisTemplate 对象进行操作
@Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); }
1.在 pom.xml 中添加 Mybatis 和数据库驱动的依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> <scope>test</scope> </dependency>
2.在 application.properties 中配置数据库连接信息
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=
3.创建一个 Mapper 接口
@Mapper public interface UserMapper { User findUserById(int id); List<User> findAllUsers(); void insertUser(User user); void updateUser(User user); void deleteUser(int id); }
4.创建对应的 Mapper XML 文件,存放在 resources 目录下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="userResultMap" type="com.example.demo.entity.User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> </resultMap> <select id="findUserById" resultMap="userResultMap"> select id, name, age from users where id = #{id} </select> <select id="findAllUsers" resultMap="userResultMap"> select id, name, age from users </select> <insert id="insertUser" parameterType="com.example.demo.entity.User"> insert into users(name, age) values(#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.demo.entity.User"> update users set name = #{name}, age = #{age} where id = #{id} </update> <delete id="deleteUser" parameterType="int"> delete from users where id = #{id} </delete> </mapper>
5.在 Spring Boot 应用程序中注入 UserMapper 接口
@Autowired private UserMapper userMapper;
SpringBoot框架原理
SpringBoot原理,如下图所示:
主要分为如下11个步骤:
1)创建 Spring Application 实例,调用 run 方法,同时将启动入口类作 为参数传递进去,由此开始了 Spring Boot 内部相关核心组件以及配置的 启动和加载;
2)通过 Spring Factories Loader 加载 META-INF/spring.factories 文 件;
3)然后由 SpringApplicationRunListener 来发出 starting 消息;
4)创建参数,并配置当前 SpringBoot 应用需要使用的 Environment 实 例;
5)完成之后,依然由 SpringApplicationRunListener 来发出 environmentPrepared 消息;
6)创建 Spring 的应用上下文实例:ApplicationContext,初始化该实例 并设置应用环境配置实例:Environment,同时加载相关的配置项;
7)由 SpringApplicationRunListener 发出 contextPrepared 消息,告 知 SpringBoot 应用当前使用的 ApplicationContext 已准备完毕;
8)将各种 Bean 组件装载入 Spring 的 IO 容器/应用上下文: ApplicationContext 中,继续由 SpringApplicationRunListener 来发出 contextLoaded 消息,告知 SpringBoot 应用当前使用的 ApplicationContext 已准备完毕;
9)重新刷新 Refresh Spring 的应用上下文实例:ApplicationContext, 完成 IOC 容器可用的最后一步;
10)由 SpringApplicationRunListener 发出 started 消息,完成最终的 程序的启动;
11)由 SpringApplicationRunListener 发出 running 消息,告知程序已 成功运行起来了。
以上就是SpringBoot框架详解,希望对你掌握SpringBoot有所帮助!
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》