kkFileView代码分析(一)——项目整体结构分析
发布日期:2022-03-08 21:50:38 浏览次数:1 分类:技术文章

本文共 2847 字,大约阅读时间需要 9 分钟。

2021SC@SDUSC

一、准备工作:了解springboot用来标记stereotype的annotation

        使用的是springboot框架,这种框架比之前使用的ssm框架要更加的简便,最直观的体现就是SpringBoot项目可以直接打包成jar包,即使在不具备安装运行环境的情况下,只要下载了jar包,就能直接启动程序,具有很强的可移植性。这对应了上篇文章中提到的第一种运行方式。

        spring boot项目一般可以使用Maven命令打包,或者借助Idea打包。

        要想读懂这个项目,我们要先对springboot的框架设计做一些了解,首先需要认识常用的几个用来标记stereotype的annotation,主要分为以下四个:@Component,@Controller,@Repository,@Service。这四个都在org.springframework.stereotype包下面,后面3个都属于@Component,可以理解为@Component是@Controller,@Repository,@Service的基类。

1、@controller :控制器,用于标注控制层组件,比如:web controller。

2、@service服务:用于标注业务层组件。

3、@repository:用于标注数据访问组件,即DAO组件,负责实现dao访问。
4、@component :用来标记任何被Spring管理的组件,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Component,@Service,@Controller,@Repository注解的类,都会纳入进spring容器中管理。只需要在Spring的xml中加入<context:component-scan>元素,Spring可以自动找到这些class,并实现注册。

二、ServerMain分析——项目的起点

private static final Logger logger = LoggerFactory.getLogger(ServerMain.class);

        上述是servermain的第一行代码,Logger来自import的org.slf4j.Logger包。

        首先来了解一下什么是slf4j, Simple Logging Facade for Java(SLF4J)是门面模式的典型应用,用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象(提供接口),允许最终用户在部署时插入所需的日志记录框架(提供获取具体日志对象的方法)。

        简而言之,SLF4J只是一个日志标准,并不是日志系统的具体实现slf4j的作用:只要所有代码都使用门面对象slf4j,我们就不需要关心具体实现,只要最终所有地方使用一种具体实现即可,便于我们更换、维护。这行代码就是通过LoggerFactory去获取slf4j提供的一个Logger接口的具体实现。

        Logger 提供以下功能:1、管理线程的信息; 2、管理类的信息;3、将 JSON 文本人性化输出;4、将换行符人性化输出;5、简洁的输出;6、从日志跳转到源码。 Logger 与 原生 Log 最大的不同就是:Logger 打印出来的日志一目了然。日志记录消息将被转发到已注册的处理程序对象,这些对象可以将消息转发到各种目标,包括控制台、文件、操作系统日志等。

public static void main(String[] args) {        StopWatch stopWatch = new StopWatch(); // 声明一个秒表用来记时        stopWatch.start();        ConfigurableApplicationContext context = new SpringApplicationBuilder(ServerMain.class)                .logStartupInfo(false)                .banner(new AppBanner())                .run(args);        stopWatch.stop();        Integer port = context.getBean(ServerProperties.class).getPort();        logger.info("kkFileView 服务启动完成,耗时:{}s,演示页请访问: http://127.0.0.1:{} ", stopWatch.getTotalTimeSeconds(), port);    }

        第四行调用SpringApplication启动项目,源码及分析如下:

public SpringApplication(ResourceLoader resourceLoader, Class
... primarySources) { this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); // 将启动类放入primarySources this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources)); // 获取web应用类型 (webFlux, servlet) this.webApplicationType = WebApplicationType.deduceFromClasspath(); // 获取 项目 META-INF/spring.factories中org.springframework.context.ApplicationContextInitializer setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class)); // 获取 项目 META-INF/spring.factories中org.springframework.context.ApplicationListener setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); this.mainApplicationClass = deduceMainApplicationClass();}

转载地址:https://blog.csdn.net/m0_55503427/article/details/120635299 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python函数闭包和装饰器实例
下一篇:菜鸟学前端第二天

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月27日 21时20分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

go会取代java吗,7月编程语言排行出炉:Go语言飙升至前十Java暴跌 2019-04-21
php波浪运算符,canvas波浪效果的实现代码 2019-04-21
php中页面平滑回到顶部代码,JavaScript简单实现网页回到顶部功能 2019-04-21
java list解析,Java List集合方法及遍历过程代码解析 2019-04-21
matlab 微分符号,Matlab 符号微积分 2019-04-21
python php 对象,Python对象,名字以及绑定 2019-04-21
python升级pip有中文路径,无法在Windows 10上更新pip的路径变量 2019-04-21
青蛙跳台阶 php,php中青蛙跳台阶的问题解决方法 2019-04-21
notepad++ php 格式化,Notepad++格式化json字符串的方法介绍 2019-04-21
nfine配置oracle,nfine去后门版和数据库说明 2019-04-21
php的workerman的http请求,请求 · workerman手册 · 看云 2021-06-24
oracle销售面试分享,Oracle 经典面试题分享 | 码农网 2021-06-24
Oracle12c 混合直方图,Oracle 12c新特性 - Hybrid histogram 3 2021-06-24
oracle如何查询表格,oracle 怎样查询某用户下的所有表的表名 2021-06-24
oracle817安装完报错,oracle817在AIX5L安装过程中碰到的几个问题 2021-06-24
linux用分词系统,Linux编译安装SCWS中文分词系统 2021-06-24
linux启动项命令大全,Linux CentOS开机启动项设置命令:chkconfig(示例代码) 2021-06-24
linux服务器禁ip策略,Linux服务器禁止通过ip地址访问网站 2021-06-24
linux把test目录打包,linux的基本操作(文件压缩与打包) 2019-04-21
linux 用户文件字段解释,/etc/shadow文件相关字段的解释 2019-04-21