2020[最全]-SpringBoot讲解(最优雅-最精美-最详细)

2021-01-26 15:10:17 浏览数 (1)

1什么是SpringBoot

springboot是spring快速开发脚手架,通过 约定大于配置 的方式,快速 构建 启动 spring项目 总结 spring boot 是 spring 快速开发脚手架,通过约定大于配置,优化了混乱的依赖管理,和复杂的配置,让我们用 java -jar 方式,运行启动 java web项目

2为什么要学习SpringBoot

spring 的缺点: 复杂的配置, 项目各种配置是开发时的损耗, 写配置挤占了写应用程序逻辑的时间。 混乱的依赖管理。 项目的依赖管理非常的繁琐。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本 和其他库不会有冲突,这是一个棘手的问题。并且,一旦选错了依赖的版本,随之而来的就是各种的不兼容 的 bug 。 spring boot 可以解决上面2个问题

3SpringBoot的特点

快速开发spring应用的框架 内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用 简化 maven 配置, parent 这种方式,一站式引入需要的各种依赖 基于注解的零配置思想 和各种流行框架, spring web mvc , mybatis , spring cloud 无缝整合

4.创建工程

-1 第一种创建方式:

4新建一个module

9添加依赖 添加父工程坐标 <parent> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-parent </artifactId> <version> 2.0.0.RELEASE </version> </parent> 添加 web 启动器 为了让 SpringBoot 帮我们完成各种自动配置,我们必须引入 SpringBoot 提供的自动配置依赖,我们称为 启动器 。 因为我们是 web 项目,这里我们引入 web 启动器: <dependencies> <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-web </artifactId> </dependency> </dependencies> 管理 jdk 版本 默认情况下, maven 工程的 jdk 版本是 1.5 ,而我们开发使用的是 1.8 ,因此这里我们需要修改 jdk 版本,只需要简单 的添加以下属性即可: <properties> <java.version> 1.8 </java.version> </properties>

10 创建启动类

public class Application { public static void main ( String [] args ) { SpringApplication . run ( Application . class , args ); } }

11 编写controller运行就好了 访问 localhost:8080//hello

运行截图 如下

-2 第二种创建方式

1 新建项目

不用创建启动类,因为这样默认给你创建好了,同上 新建一个controller ,getMapping("/hello") , 然后访问 localhost:8080//hello 就好了

springboot创建一个最贱单的hello项目,你学费了吗?

5 spring全注解配置(不是SpringBoot的)

spring全注解配置 主要 靠java类 和 一些注解,比较常用的注解有:

@Configuration : 声明一个类 作为 配置类,代替xml文件 @Bean : 声明在 方法上 ,将 方法的返回值加入Bean容器代替 <bean> 标签 @value : 属性注入值 @PropertySource 指定外部属性文件,

我们接下来用 java 配置来尝试实现连接池配置:

首先引入 Druid 连接池依赖:

<dependency> <groupId> com.alibaba </groupId> <artifactId> druid </artifactId> <version> 1.1.10 </version> </dependency>

创建一个jdbc.properties文件,编写jdbc属性:

jdbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc : mysql : //127.0.0.1 : 3306/test jdbc.username = root jdbc.password = root

然后编写代码:

@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }

6 SpringBoot属性配置

@Value注解。这种方式虽然可行,但是 不够强大,因为它只能注入基本类型值。 在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入

1)我们新建一个类,用@ConfigurationProperties(来进行属性注入:

@ConfigurationProperties(prefix = "jdbc") public class JdbcProperties { private String url; private String driverClassName; private String username; private String password; getters 和 setters }

在类上通过 @ConfigurationProperties注解声明当前类为属性读取类 prefix="jdbc" 读取属性文件中, 前缀为jdbc的值。 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致 需要注意的是,这里我们并没有指定属性文件的地址, 所以我们需要把 jdbc.properties 名称 改为 application.properties ,这是 SpringBoot 默认读取的属性文件名:

2)在JdbcConfifig中使用这个属性:

@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfig { @Bean public DataSource dataSource(JdbcProperties jdbc) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(jdbc.getUrl()); dataSource.setDriverClassName(jdbc.getDriverClassName()); dataSource.setUsername(jdbc.getUsername()); dataSource.setPassword(jdbc.getPassword()); return dataSource; } }

通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的对 象

然后你可以通过以下方式注入 JdbcProperties :

@Autowired注入

@Autowired private JdbcProperties prop ;

构造函数注入

private JdbcProperties prop ; public JdbcConfig ( Jdbcproperties prop ){ this . prop = prop ; }

@Bean的方法参数注入

@Bean public Datasource dataSource ( JdbcProperties prop ){ // ... }

更优雅的注入

事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需 要的地方声明即可:

@Configuration public class JdbcConfig { @Bean @ConfigurationProperties(prefix = "jdbc") // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中 public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); return dataSource; } }

我们直接把 @ConfigurationProperties(prefix = "jdbc") 声明在需要使用的 @Bean 的方法上,然后 SpringBoot

就会自动调用这个 Bean (此处是 DataSource ) set 方法,然后完成注入。使用的前提是 :该类必须有对应属性的 set方法!

7 . 自动配置原理

@SpringBootApplication 点击进入,查看源码:

这里重点的注解有 3 个: @SpringBootConfifiguration @EnableAutoConfifiguration @ComponentScan @SpringBootConfifiguration 我们继续点击查看源码:

通过这段我们可以看出,在这个注解上面,又有一个 @Configuration 注解。这个注解的作用就是声明当前类是一 个配置类,然后 Spring 会自动扫描到添加了 @Configuration 的类,并且读取其中的配置信息。 @ComponentScan 我们跟进源码:

配置组件扫描的指令。提供了类似与 <context: component - scan> 标签的作用 通过 basePackageClasses 或者 basePackages 属性来指定要扫描的包。如果没有指定这些属性,那么将从声 明这个注解的类所在的包开始,扫描包及子包 而我们的 @SpringBootApplication 注解声明的类就是 main 函数所在的启动类,因此扫描的包是该类所在包及其子 包。 因此,一般启动类会放在一个比较前的包目录中。

@EnableAutoConfifiguration

关于这个注解,官网上有一段说明: The second class-level annotation is @EnableAutoConfiguration . This annotation tells Spring Boot to “guess” how you want to confifigure Spring, based on the jar dependencies that you have added. Since spring - boot - starter - web added Tomcat and Spring MVC, the auto-confifiguration assumes that you are developing a web application and sets up Spring accordingly. 简单翻译以下: 第二级的注解 @EnableAutoConfiguration ,告诉 SpringBoot 基于你所添加的依赖,去 “猜测”你想要如何配置 Spring 。比如我们引入了 spring-boot-starter-web ,而这个启动器中帮我们添加了 tomcat 、 SpringMVC 的 依赖。此时自动配置就知道你是要开发一个 web 应用,所以就帮你完成了 web 及 SpringMVC 的默认配置了! 总结, SpringBoot 内部对大量的第三方库进行了默认配置,我们引入对应库所需的依赖,那么默认配置就会生效。

8 默认配置原理

@EnableAutoConfifiguration会开启SpringBoot的自动配置,并且根据你引入的依赖来生效对应的默认配置,

springboot 如何做到的?

其实在我们的项目中,已经引入了一个依赖: spring-boot-autoconfigure ,其中定义了大量自动配置类:

我们看到这个类上的4个注解: @Configuration :声明这个类是一个配置类 @Conditional OnClass ({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }) 这里的条件是 OnClass ,也就是满足以下类存在: Servlet 、 DispatcherServlet 、 WebMvcConfifigurer ,其中 Servlet只要引入了 tomcat 依赖自然会有,后两个需要引入 SpringMVC 才会有。这里就是判断你是否引入了相 关依赖,引入依赖后该条件成立,当前类的配置才会生效! @Conditional OnMissingBean (WebMvcConfigurationSupport.class) 这个条件与上面不同, OnMissingBean ,是说环境中没有指定的 Bean 这个才生效。其实这就是自定义配置的 入口,也就是说,如果我们自己配置了一个WebMVCConfifigurationSupport 的类,那么这个默认配置就会失 效! 接着,我们查看该类中定义了什么: 视图解析器:

默认配置总结

SpringBoot 为我们提供了默认配置,而默认配置生效的条件一般有两个: 引入了相关依赖 没有自定义配置类

9 Springboot如何测试

测试 引入测试构建 ​​​​​​​<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> 测试代码 @RunWith(SpringRunner.class) @SpringBootTest public class UserDaoTest { @Autowired private UserDao userDao; @Test public void testFindAll() { List<User> list = userDao.findAll(); } }

基本的SpringBoot介绍结束了 ,请客观移步

SpringBoot整合jdbc 整合Mybatis 整合 Thymeleaf Mybatis Plus

https://blog.csdn.net/weixin_45434902/article/details/109580603 点我进入

~关注我 带你看更多精品技术和面试必备

在我脑子里泡了这么久 ,可以点个赞吗 ! 累 ,

么么哒!!!! ​​​​​​​

0 人点赞