「java启动流程」java web项目启动流程

博主:adminadmin 2022-11-30 18:42:07 156

今天给各位分享java启动流程的知识,其中也会对java web项目启动流程进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

springboot启动流程是什么?

首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于Spring Boot 2.1.5,非Spring的代码只有下面这个启。

提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。

Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。

SpringBoot的启动主要是通过实例化SpringApplication来启动的。

启动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。

在SpringBoot中启动tomcat的工作在刷新上下这一步。

而tomcat的启动主要是实例化两个组件:Connector、Container,一个tomcat实例就是一个Server,一个Server包含多个Service,也就是多个应用程序,每个Service包含多个Connector和一个Container,而一个Container下又包含多个子容器。

Spring启动流程(一)

以java-config形式编写一个测试demo,新建一个 AnnotationConfigApplicationContext ,如果是XML形式使用 ClassPathXmlApplicationContext ;

两者都继承了 AbstractApplicationContext 类,详细看下面的层次图。

注意:在new AnnotationConfigApplicationContext()时如果未指定参数,会报运行时异常: org.springframework.context.annotation.AnnotationConfigApplicationContext@6ebc05a6 has not been refreshed yet

AnnotationConfigApplicationContext的有参构造执行了3个方法,分别是自己的无参构造、register()、refresh();

在描述前先从网上找了一个总体流程图方便了解一下大致流程,理清思路。

在执行 AnnotationConfigApplicationContext 的无参构造方法前会调用父类 GenericApplicationContext 的无参构造方法;

GenericApplicationContext中实例化一个 DefaultListableBeanFactory ,也就是说bean工厂实际上是应用上下文的一个属性;

从上面的类层次图可以看到:应用上下文和bean工厂又同时实现了BeanFactory接口。

前面讲到我们为了解IOC使用了Spring提供的AnnotationConfigApplicationContext作为入口展开,那Spring怎么对加了特定注解(如 @Service、@Repository)的类进行读取转化成 BeanDefinition 对象呢?

又如何对指定的包目录进行扫描查找 bean 对象呢?

所以我们需要new一个注解配置读取器和一个路径扫描器。

AnnotatedBeanDefinitionReader中执行了AnnotationConfigUtils中的registerAnnotationConfigProcessors(this.registry)方法,会向容器注册Sprign内置的处理器。

registerAnnotationConfigProcessors方法中通过 new RootBeanDefinition(XX.class) 新建一个RootBeanDefinition(BeanDefinition的一个实现),然后调用registerPostProcessor将内置bean对应的BeanDefinition保存到bean工厂中;

这里需要说明的是:我们刚刚一直在谈到注册bean,实际上就是将内置bean对应的beanDefinition保存到bean工厂中。那为什么要保存beanDefinition呢?因为Spring是跟据beanDefinition中对bean的描述,来实例化对象的,就算自己定义的bean也是要被解析成一个beanDefinition并注册的。

其中最主要的组件便是 ConfigurationClassPostProcessor 和 AutowiredAnnotationBeanPostProcessor ,前者是一个 beanFactory 后置处理器,用来完成 bean 的扫描与注入工作,后者是一个 bean 后置处理器,用来完成 @AutoWired 自动注入。

这个步骤主要是用来解析用户传入的 Spring 配置类,解析成一个 BeanDefinition 然后注册到容器中,主要源码如下:

通过生成AnnotatedGenericBeanDefinition,然后解析给BeanDefinition的其他属性赋值,然后将BeanDefinition和beanName封装成一个BeanDefinitionHolder对象注册到bean工厂中(就是将beanName与baenDefinition封装到Map中,将beanName放到list中。Map与list都是bean工厂DefaultListableBeanFactory所维护的属性),和前面内置bean的注册相同。

执行到这一步,register方法到此就结束了,通过断点观察BeanFactory中的beanDefinitionMap属性可以看出: this()和this.register(componentClasses)方法中就是将内置bean和我们传的配置bean的beanDefinition进行了注册,还没处理标记了@Component等注解的自定义bean。

javaEE项目启动过程中Spring是怎么一步步执行的?

你这个问题问的不清楚,如果是和其他框架整合,运行过程如下。Spring+struts

1,tomcat启动,创建容器。web.xml是服务器最先调用的文件。

2,然后加载WEB-INF下的web.xml初始化里面内容,

3,spring配置文件初始化,主要是ioc反转控制,和aop切面。spring注入是面向接口编程。

3,因为web.xml初始化了,说明struts过滤器也被创建,下面就可以拦截请求了。

4,页面请求发出,被status拦截送到action,action里面有spring注入接口。可以直接调用方法不需要new 对象。再然后就是业务处理。

下面这是个springMVC单独使用。不用注解的情况下。

与servlet处理请求方式差不多,

java程序不能执行?

Java程序的运行过程(执行流程)分析

1、编写:是指在 Java 开发环境中进行程序代码的输入,最终形成后缀名为 .java 的 Java 源文件。

2、编译:是指使用 Java 编译器对源文件进行错误排査的过程,编译后将生成后缀名为 .class 的字节码文件,不像C语言那样生成可执行文件。

3、运行:是指使用 Java 解释器将字节码文件翻译成机器代码,执行并显示结果。

字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码。它是一种二进制文件,是 Java 源文件由 Java 编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的 Java 解释器来解释执行,因此 Java 是一种在编译基础上进行解释运行的语言。

Java 解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,以便执行。因此 Java 程序不能直接运行在现有的操作系统平台上,它必须运行在被称为 Java 虚拟机的软件平台之上。

Java 虚拟机(JVM)是运行 Java 程序的软件环境,Java 解释器是 Java 虚拟机的一部分。在运行 Java 程序时,首先会启动 JVM,然后由它来负责解释执行 Java 的字节码程序,并且 Java 字节码程序只能运行于 JVM 之上。这样利用 JVM 就可以把 Java 字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对特定平台的 JVM,Java 程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。

JVM 把这种不同软、硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM 是 Java 平台架构的基础,Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的。Java 的这种运行机制可以通过下图来说明。

Java 语言这种“一次编写,到处运行”的方式,有效地解决了目前大多数高级程序设计语言需要针对不同系统来编译产生不同机器代码的问题,即硬件环境和操作平台的异构问题,大大降低了程序开发、维护和管理的开销。

提示:Java 程序通过 JVM 可以实现跨平台特性,但 JVM 是不跨平台的。也就是说,不同操作系统之上的 JVM 是不同的,Windows 平台之上的 JVM 不能用在 Linux 平台,反之亦然。

JAVA程序如何在win7系统中开机启动详解

以下是在win7系统中如何让我们自己写的java程序开机自启

1,首先我们需要把我们的java程序打成可以运行的jar,放到当前系统的 classpath 目录中。

2,新建 bat 文件。流程如下:

@echo off

java -jar 路径\xxxx.jar

@pause

然后点击文件-另存为(存放jar的目录下),文件名修改xxxx.bat(提议命名和jar名一致)。

3,windows+r输入regedit会出现注册表编辑器。

4,在注册表编辑器中找到Run目录,具体路径如下:

HKEY_LOCAL_MACHINE\SOFTWARE\Mecrosoft\Windows\CurrentVersion\Run

5,找到Run目录之后,在右边框中右击新建字符串值,新建唯一标示作为键名,然后右击新建名称-修改在数值数据中填写"路径\xxxx.bat"。

6,重启你的机器,你会看到你想要的效果。

关于java启动流程和java web项目启动流程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。