「java启动流程」java项目如何启动

博主:adminadmin 2022-11-23 18:22:06 232

本篇文章给大家谈谈java启动流程,以及java项目如何启动对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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,重启你的机器,你会看到你想要的效果。

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处理请求方式差不多,

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。

java启动流程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java项目如何启动、java启动流程的信息别忘了在本站进行查找喔。

The End

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