Spring Boot从入门到精通-项目搭建

Spring Boot从入门到精通-项目搭建,第1张

Spring Boot极大的简化了java项目的开发,在之前如果想要开发一个java项目,需要安装tomcat或者其他容器插件。但是Spring Boot内部已经集成了tomcat,因此项目的启动异常的方便。而且Spring Boot的开发中有很多默认的配置,帮助我们省去了相当多的时间。

在idea中,File-->New-->Project

选择Spring Initializr

填写你的maven项目的groupId和artifact等项目基本信息之后,在依赖中选择Web-->Web之后finish。

目录结构如下:

直接运行DemoApplicationjava就可以运行项目了。

你也可以使用官方模板快速开始Spring Boot项目

接下来我们分析一下pomxml中的依赖。

Spring Boot中还有一个很重要的文件:applicationproperties/yml/yaml文件。

项目中的配置不再是以前的xml形式,而是写在这个文件中。Spring Boot已经为我们提供了很多默认的配置。

以上我们搭建了一个完全没有进行任何 *** 作的Spring Boot框架,下一节我们将继续为我们的项目添砖加瓦一步步深入了解Spring Boot。Spring Boot从入门到精通-初识注解、接口

1、ApplicationContextInitializer,在Spring上下文被刷新之前进行初始化的 *** 作。这个时候已经创建了ApplicationContext ,但是没有refresh(),ApplicationContextInitializer对ApplicationContext进行初始话 *** 作。

2、SpringApplicationRunListener,对ApplicationContext的运行各个时期的事件进行广播,时事件能够被ApplicationListener所监听到。

3、Runner,Spring上下文后置处理 Runners可以是两个接口的实现类: orgspringframeworkbootApplicationRunner orgspringframeworkbootCommandLineRunner 其实没有什么不同之处,除了接口中的run方法接受的参数类型是不一样的以外。一个是封装好的ApplicationArguments类型,另一个是直接的String不定长数组类型。因此根据需要选择相应的接口实现即可。

SpringBoot启动的时候,不论调用什么方法,都会构造一个SpringApplication的实例,然后调用这个实例的run方法,这样就表示启动SpringBoot。

在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:

SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:

在@SpringBootApplication标签中引入了 EnableAutoConfigurationImportSelector ,其中调用了selectImports()方法,方法中调用orgspringframeworkbootautoconfigureEnableAutoConfigurationImportSelector#getCandidateConfigurations方法,使用SpringFactoryLoader把META-INF文件夹中的 springfactories 文件中 EnableAutoConfiguration 为key的文件加载了。 加载的文件全部都是java config配置文件(有默认配置),利用 @Conditional (Class< extends Condition>[]) 标签,对相应的bean进行选择性的加载。

比较基本而且重要的一个类,运行加载了MATE-INF中的springfactories 文件

@Conditional标签是全部Conditional相关标签的根源。 源码中Conditional标签使用的是ConditionEvaluator来解析,如下 orgspringframeworkcontextannotationAnnotatedBeanDefinitionReader#registerBean(javalangClass<>, javalangString, javalangClass< extends javalangannotationAnnotation>) orgspringframeworkcontextannotationConditionEvaluator#shouldSkip(orgspringframeworkcoretypeAnnotatedTypeMetadata, orgspringframeworkcontextannotationConfigurationConditionConfigurationPhase)

在初始化AnnotationConfigApplicationContext的时候,对ConfigurationClassPostProcessor、AutowiredAnnotationBeanPostProcessor等类进行了注册。如下

ConfigurationClassPostProcessor是一个BeanFactoryPostProcessor,所以会对BeanDefinitionRegistry或者BeanDefinition创建之后进行后置加工(refresh方法中,已经创建了BeanFactory,具体到运行到哪里看源码)。

import解析原理根据的是ConfigurationClassPostProcessor,ConfigurationClassPostProcessor的加载过程参考上面 主要分析为啥@import标签是引入配置的但是却能够调用Selector的方法 orgspringframeworkcontextannotationConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry orgspringframeworkcontextannotationConfigurationClassPostProcessor#processConfigBeanDefinitions orgspringframeworkcontextannotationConfigurationClassParser#parse(javautilSet<orgspringframeworkbeansfactoryconfigBeanDefinitionHolder>) orgspringframeworkcontextannotationConfigurationClassParser#processDeferredImportSelectors 接着如下,调用了selectImports方法

Spring Boot 最核心的 25 个注解

1、@SpringBootApplication

这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

其实这个注解就是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解。

2、@EnableAutoConfiguration

允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。

如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。

3、@Configuration

这是 Spring 30 添加的一个注解,用来代替 applicationContextxml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。

4、@SpringBootConfiguration

这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。

5、@ComponentScan

这是 Spring 31 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。

前面 5 个注解可以在这篇文章《Spring Boot 最核心的 3 个注解详解》中了解更多细节的。

6、@Conditional

这是 Spring 40 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。

7、@ConditionalOnBean

组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。

8、@ConditionalOnMissingBean

组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。

9、@ConditionalOnClass

组合 @Conditional 注解,当容器中有指定的 Class 才开启配置。

10、@ConditionalOnMissingClass

组合 @Conditional 注解,和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。

11、@ConditionalOnWebApplication

组合 @Conditional 注解,当前项目类型是 WEB 项目才开启配置。

当前项目有以下 3 种类型。

enum Type {

}

12、@ConditionalOnNotWebApplication

组合 @Conditional 注解,和 @ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。

13、@ConditionalOnProperty

组合 @Conditional 注解,当指定的属性有指定的值时才开启配置。

14、@ConditionalOnExpression

组合 @Conditional 注解,当 SpEL 表达式为 true 时才开启配置。

15、@ConditionalOnJava

组合 @Conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置。

16、@ConditionalOnResource

组合 @Conditional 注解,当类路径下有指定的资源才开启配置。

17、@ConditionalOnJndi

组合 @Conditional 注解,当指定的 JNDI 存在时才开启配置。

18、@ConditionalOnCloudPlatform

组合 @Conditional 注解,当指定的云平台激活时才开启配置。

19、@ConditionalOnSingleCandidate

组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。

20、@ConfigurationProperties

用来加载额外的配置(如 properties 文件),可用在 @Configuration 注解类,或者 @Bean 注解方法上面。

21、@EnableConfigurationProperties

一般要配合 @ConfigurationProperties 注解使用,用来开启对 @ConfigurationProperties 注解配置 Bean 的支持。

22、@AutoConfigureAfter

用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。

如 Mybatis 的自动配置类,需要在数据源自动配置类之后。

23、@AutoConfigureBefore

这个和 @AutoConfigureAfter 注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。

24、@Import

这是 Spring 30 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。

25、@ImportResource

这是 Spring 30 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。

欢迎Java工程师朋友们加入Java高并发: 957734884 ,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。

beatlsql 优点

引入依赖

这几个依赖都是必须的。

整合阶段

由于springboot没有对 beatlsql的快速启动装配,所以需要我自己导入相关的bean,包括数据源,包扫描,事物管理器等。

在application加入以下代码:

在resouces包下,加META_INF文件夹,文件夹中加入spring-devtoolsproperties:

restartincludebeetl=/beetl-232jar

restartincludebeetlsql=/beetlsql-231jar

在templates下加一个indexbtl文件。

加入jar和配置beatlsql的这些bean,以及resources这些配置之后,springboot就能够访问到数据库类。

举个restful的栗子

初始化数据库的表

bean

数据访问dao层

接口继承BaseMapper,就能获取单表查询的一些性质,当你需要自定义sql的时候,只需要在resouses/sql/accountmd文件下书写文件:

其中“=== ”上面是唯一标识,对应于接口的方法名,“ ”后面是注释,在下面就是自定义的sql语句,具体的见官方文档。

web层

这里省略了service层,实际开发补上。

通过postman 测试,代码已全部通过。

个人使用感受,使用bealsql做了一些项目的试验,但是没有真正用于真正的生产环境,用起来非常的爽。但是springboot没有提供自动装配的直接支持,需要自己注解bean。另外使用这个orm的人不太多,有木有坑不知道,在我使用的过程中没有遇到什么问题。另外它的中文文档比较友好。

在对Controller进行修改完的时候,启动项目出现的问题,情况如图所示:

对于这个问题,总结分析原因如下:

也就是Bean配置失败

删除一些类的时候,注意将这些类连带的@Autowired注解一起删掉,不然可能没有报错,但导致无法注入Bean,出现这种不明所以的bug,就可以解决。

仔细检查类的路径是不是正确,因为在spring boot启动时启动类会自动扫描发现所在包及其子包下的内容,例如出现错将Service的包放在了启动类的所在包的外层,导致启动时扫描不到就会报错。解决办法就是将包结构重新整理。

解决方法 是在dao层的UserMapper上加上 @Mapper ,大部分问题都是由于缺少这个持久层注解问题

持久层 DAO 和业务层 Service 的包都必须是在主程序的包的子包下面才会注入。在持久层里面的Dao接口中应当以 @Mapper 进行注解,在业务层的Servcie类中应当以 @Service 进行注解

Spring Boot 提供了一套额外的工具,可以提升应用程序开发的体验,只用在项目中包含 spring-boot-devtools 模块就行。该模块会在开发模式下设置一些默认的属性,例如:禁用缓存、设置日志等级;还会监听 classpath 的变化,自动的重启应用。

spring-boot-devtools 给开发带来了很多的便利,这篇文章总结可它的一些用法。

要使用 devtools,需要先添加模块依赖,Maven 和 Gradle 的配置如下:

Maven:

Gradle:

运行完整打包的应用时,开发工具会被禁用。当使用 java -jar 或者特殊的类加载器运行时,会被认为是生产环境。在 Maven 中使用 <optional>true</optional> 标记该依赖时可选的,或者在 Gradle 中使用自定义的 developmentOnly 配置可以防止开发工具应用到项目的其他模块。

Spring Boot 中的一些库会通过缓存来提升性能。比如:模块引擎缓存已编译的模板,已避免重复解析模板文件;Spring MVC 在响应静态资源时设置 >

以上就是关于Spring Boot从入门到精通-项目搭建全部的内容,包括:Spring Boot从入门到精通-项目搭建、Spring Boot小记、Spring Boot 最核心的 25 个注解,都是干货!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9749837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存