首页>>后端>>Spring->springboot框架分层图(springboot框架图解)

springboot框架分层图(springboot框架图解)

时间:2023-12-01 本站 点击:0

一图看懂Spring Boot 异步框架

在SpringBoot的日常开发中,一般都是同步调用的。但经常有特殊业务需要做异步来处理,例如:注册新用户,送100个积分,或下单成功,发送push消息等等。

就拿注册新用户为什么要异步处理?

在SpringBoot中使用异步调用是很简单的,只需要使用@Async注解即可实现方法的异步调用。

采用@EnableAsync来开启异步任务支持,另外需要加入@Configuration来把当前类加入springIOC容器中。

增加一个service类,用来做积分处理。

@Async添加在方法上,代表该方法为异步处理。

@Async注解,在默认情况下用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上的线程池,因为线程不重用,每次调用都会新建一条线程。

可以通过控制台日志输出查看,每次打印的线程名都是[task-1]、[task-2]、[task-3]、[task-4].....递增的。

@Async注解异步框架提供多种线程

SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。

SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方。

ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。

ThreadPoolTaskScheduler:可以使用cron表达式。

ThreadPoolTaskExecutor :最常使用,推荐。 其实质是对java.util.concurrent.ThreadPoolExecutor的包装。

SpringBoot统一日志框架

通常一个完整的应用下会依赖于多种不同的框架,而且它们记录日志使用的日志框架也不尽相同。我们在使用 Spring Boot 时,同样可能用到其他的框架,这些框架的底层都有自己的日志框架,此时我们也需要对日志框架进行统一。

SLF4J 官方给出的统一日志框架的方案一共需要以下 3 步 :

Soring Boot 作为一款优秀的开箱即用的框架,已经为用户完成了其中 2 步:引入替换包和导入 SLF4J 实现。我们按住Ctrl,点击spring-boot-starter-web,查看spring-boot-starter-web的Maven依赖,可以看到spring-boot-starter,如下图:

我们再按住Ctrl,点击spring-boot-starter,查看spring-boot-starter的Maven依赖,可以看到spring-boot-starter-logging,如下图:

继续按住Ctrl,点击spring-boot-starter-logging,查看spring-boot-starter-logging的Maven依赖,如下图:

从图上我们可以看出spring-boot-starter-logging 的 Maven 依赖不但引入了 logback-classic (包含了日志框架 SLF4J 的实现),还引入了 log4j-to-slf4j(log4j 的替换包),jul-to-slf4j (JUL 的替换包),即 Spring Boot 已经为我们完成了统一日志框架的 3 个步骤中的 2 步。

SpringBoot 底层使用 slf4j+logback 的方式记录日志,当我们引入了依赖了其他日志框架的第三方框架时,只需要把这个框架所依赖的日志框架排除,即可实现日志框架的统一。比如下图:

日志配置

根据项目需要我们还可以在配置文件配置日志的一些属性。如下图:

运行项目我们可以看到配置已经生效了,项目结构中出现了配置的日志输出文件my.log。

springboot启动过程是?

总览:

上图为SpringBoot启动结构图,我们发现启动流程主要分为三个部分,第一部分进行、SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块。

及核心的创建上下文环境模块,第三部分是自动化配置模块,该模块作为springboot自动配置核心,在后面的分析中会详细讨论。在下面的启动程序中我们会串联起结构中的主要功能。

启动:

每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解。

以及@ImportResource注解(if need),@SpringBootApplication包括三个注解,功能如下:@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。

@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。

@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下。

Spring Boot(5)一个极简且完整的后台框架

SpringBoot,我也是第一次用,实现了一个极简单的后台框架,希望有不太合理的地方大家给个建议。

Spring Boot(1)工具安装:

Spring Boot(2)新建Spring Boot工程

Spring Boot(3)整合Mybatis

Spring Boot(4)整合thymeleaf

Spring Boot(5)一个极简且完整的后台框架

Spring Boot(6)jar方式打包发布

Spring Boot(7)war方式打包发布

【每天学点Spring】Spring以及Spring Boot框架知识图谱

【参考】

Spring框架以及Spring Boot框架当然是Java最火热的框架之一,罗列了一些知识点:

【解释】

看文档 是最最重要的,所以在RoadMap图中,把它放在第一位。

很多时候我们都会忽略这一点,但其实最准确的解释往往是来自于文档。开发人员花了大量时间来写文档,当然是希望对使用者有所帮助,并且Spring的文档写的也非常全面,所以很有必要好好读一读文档。

Spring 官网:

Spring Framework文档:

从文档首页也能看到Spring框架的分类,所以才说文档很重要:

Spring Boot文档:

谈谈对spring boot分层中各层的理解

1 Dao层:持久层,主要是和数据库进行交互

dao层首先胡创建dao接口,接着就可以在配置文件中定义该接口的实现类;接着就可以在模块中调用dao的接口进行数据业务的处理,而不用关注此接口的具体实现是哪一个类,dao层的数据源和数据库实在配置文件中进行配置的。

2 Entity层:实体层,数据库在项目中的类

主要用于定义与数据库对象的属性,提供get/set方法,带参和无参的构造方法。

3 Service层:业务层控制业务

业务模块的逻辑应用设计,和DAO层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。

好处:封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。

4.Controller层:控制层 控制业务逻辑

具体的业务模块流程的控制,controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。

Controller和Service的区别是:Controller负责具体的业务模块流程的控制;Service层负责业务模块的逻辑应用设计

总结:具体的一个项目中有:controller层调用了Service层的方法,Service层调用Dao层的方法,其中调用的参数是使用Entity层进行传递的。

补充:5、View层 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/5957.html