一、spring是咋启动的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一、spring是咋启动的相关的知识,希望对你有一定的参考价值。
参考技术A spring是咋启动的对于应用程序来说,spring的启动是没有什么好说的,直接运行main方法,通过new GenericXmlApplicationContext、ClassPathXmlApplicationContext、XmlBeanFactory等这些容器类,会自动解析xml配置,然后自动进行bean的注入、初始化等,而我们最终也可以从容器中提取这些类,进行各种各样的操作。
对于web程序来说,并不是直接用main方式调用spring容器进行启动的,而都是以tomcat方式进行启动的,那么tomcat是怎么解析spring的xml配置,怎么进行bean的初始化、注入的呢?
tomcat其实也是一个main程序。它启动后,调用spring的配置文件的过程如下:
StandContext.startInternal()àStandContext.listenerStart()àContextLoadListener.contextInitialized()àAbstractApplicationContext.refresh().
ContextLoadListener实现了ServletContextListener,因此会调用ContextLoadListener的contextInitialized()方法。
这样就很明了了吧, refresh方法正是spring进行xml解析、bean注入、ioc、aop等等方法的入口。 tomcat会把ServletContextEvent传递给spring, even中有servletContext,这个context也构造出spring的context。最后通过refresh完成大部分的构建、初始化工作。
那么对于springMvc是怎么启动的呢?springMvc的配置文件 spring-servlet.xml是如何解析的呢?
同样还是在tomcat的loadOnStartup()方法中,对大于等于0的servelet进行了调用。
StandardContext.startInternal()àloadOnStartup()àStandardWrapper.load()àload()àloadServlet()àinitServlet()àDispatcherServlet.init()àFrameworkServlet.initServletBean()àrefresh()。 这里加载的是springMvc的配置文件
为什么说springMvc是spring的子容器?
因为spring的配置加载后,然后对DispatcherServlet 进行初始化,最后对springMvc的配置解析是存放在DispatcherServlet 的父类FrameworkServlet 中的webApplicationContext属性容器中。其中在initWebApplicationContext()方法中,通过在ServletContext也即ApplicationContext中set进去的属性“ ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE ”,获取到rootContext,rootContext是前面spring解析出来的容器,setParent(),在webApplicationContext设置父容器rootContext, 通过rootContext然后构建出webApplicationContext。也就是说springMvc是获得到了spring的容器。
子容器可以获取到父容器的内容,而父容器获取不到子容器的内容。
"favlis\5x��
uboot移植,板子不支持是咋回事?
为什么我的uboot镜像无法启动开发板?
写在前面:
我的开发板被我玩坏了,启动不了了,不怕,正好测试一下整个系统的移植过程。
uboot
其实只是bootloader中的一种,因为简单好用,所以用的越来越多。
uboot一般有三类
uboot官方的uboot代码
由uboot 官方维护开发的uboot 版本,版本更新快,基本包含所有常用的芯片。
半导体厂商的uboot代码
半导体厂商维护的一个uboot,专门针对自家的芯片,在对自家芯片支持上要比uboot官方的好。
开发板厂商的uboot代码
开发板厂商在半导体厂商提供的uboot基础上加入了对自家开发板的支持。
uboot移植
所以,这下大家都明白了吧,我们不能直接用官网上下载的uboot,要根据自己的开发板来移植。
综上:
uboot移植不是简单的把uboot放到自己的开发板里,而是在已有uboot上根据自己开发板外设进行修改之后再传到自己的开发板上,这才叫移植。
这里用来做训练,所以烧录到SD卡里,进行启动:
在虚拟机中:
root@Iron2222:/home/book/100ask_imx6ull-sdk# cd Uboot-2017.03/
root@Iron2222:/home/book/100ask_imx6ull-sdk/Uboot-2017.03# ls
Kbuild board examples tools u-boot.dtb
Kconfig cmd fs u-boot u-boot.lds
Licenses common include u-boot-dtb.bin u-boot.map
MAINTAINERS config.mk lib u-boot-dtb.imx u-boot.srec
Makefile configs net u-boot-dtb.imx.log u-boot.sym
README disk post u-boot-nodtb.bin
System.map doc scripts u-boot.bin
api drivers snapshot.commit u-boot.cfg
arch dts test u-boot.cfg.configs
root@Iron2222:/home/book/100ask_imx6ull-sdk/Uboot-2017.03# dd if=u-boot-dtb.imx of=/dev/sdb bs=1k seek=1 conv=fsync
511+0 records in
511+0 records out
523264 bytes (523 kB, 511 KiB) copied, 0.47503 s, 1.1 MB/s
开发板上:
U-Boot 2017.03-g8695c9c4bc-dirty (Nov 16 2021 - 07:55:09 -0500)
CPU: Freescale i.MX6ULL rev1.1 696 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 32C
Reset cause: POR
Model: Freescale i.MX6 ULL 14x14 EVK Board
Board: MX6ULL 14x14 EVK
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment
Display: TFT43AB (480x272)
Video: 480x272x24
In: serial
Out: serial
Err: serial
switch to partitions #0, OK
mmc0 is current device
Net: No ethernet found.
Normal Boot
Hit any key to stop autoboot: 0
成功!!!!
结束
以上是关于一、spring是咋启动的的主要内容,如果未能解决你的问题,请参考以下文章