1.xml classpath ç¸å¯¹è·¯å¾
2.Spring源码- 02 Spring IoC容器启动之refresh方法
3.å¨web.xmlä¸classpathåclasspath*çåºå«
xml classpath ç¸å¯¹è·¯å¾
web.xmlä¸çç¸å¯¹è·¯å¾æ¯ç¸å¯¹äºé¡¹ç®å°åçè·¯å¾ã
_å½æèªæ¯è¤ªä¾µèµ£ç§é£§é«åè¯ç©èªå 鸬æ¯æ¸åÉèåæ ¡âç©èªè±åµæ Jè¤åå½æèªç梢æé¢è°´æ¶æµ 6åè°æ·HTMLç»å¯¹è·¯å¾(absolute path)æ带ååçæ件çå®æ´è·¯å¾ã
_æèªå®èè°´ä¼è°å«ç©èªå®ç¨³_:\windows\system\cmd.exeã
_å½æèªå®èè°´æ¥é¼»å¥¥èªçå«ç©èªå®å绲鼻奥èªæ®µ_:\windowsè¦æè¿°ä¸è¿°è·¯å¾ï¼åªéè¾å ¥system\cmd.exeå®é ä¸ï¼ä¸¥æ ¼çç¸å¯¹è·¯å¾åæ³åºä¸º.\system\cmd.exeå ¶ä¸ï¼.表示å½åè·¯å¾ï¼å¨ééæ åµä¸å¯ä»¥çç¥ï¼åªæå¨ç¹æ®çæ åµä¸ä¸è½çç¥ãåå¦å½åè·¯å¾ä¸ºc:\program filesè¦è°ç¨ä¸è¿°å½ä»¤ï¼åéè¦è¾å ¥..\windows\system\cmd.exeå ¶ä¸ï¼..为ç¶ç®å½ãå½åè·¯å¾å¦æ为c:\program files\common filesåéè¦è¾å ¥..\..\windows\system\cmd.exeå¦å¤ï¼è¿æä¸ç§ä¸å å«ç符çç¹æ®ç»å¯¹è·¯å¾ï¼å½¢å¦\windows\system\cmd.exeæ 论å½åè·¯å¾æ¯ä»ä¹ï¼ä¼èªå¨å°ä»å½åççæ ¹ç®å½å¼å§æ¥æ¾æå®çç¨åºã
Spring源码- Spring IoC容器启动之refresh方法
在注册阶段,源码AnnotationConfigApplicationContext构造方法中的源码第一个方法被分析过。接下来,源码我们关注第二个方法:register(componentClasses)。源码在使用XML配置方式时,源码通过new ClassPathXmlApplicationContext("classpath:spring.xml")来创建实例,源码异步任务源码其中需要指定xml配置文件路径。源码使用注解方式时,源码也需要为ApplicationContext提供起始配置源头,源码这里使用配置类代替xml配置文件,源码按照配置类中的源码注解(如@ComponentScan、@Import、源码@Bean)解析并注入Bean到IoC容器。源码
通过配置类,源码Spring解析注解实现Bean的源码庆余年源码注入。使用@Configuration注解定义的配置类相当于xml配置文件,但目前Spring推荐使用注解方式,xml配置的使用概率正在降低。
register(componentClasses)方法的核心逻辑在AnnotatedBeanDefinitionReader#doRegisterBean中,将传入的配置类解析为BeanDefinition并注册到IoC容器。ConfigurationClassPostProcessor这个BeanFactory后置处理器在IoC初始化时,获取配置类的源码换会员BeanDefinition集合,开始解析。
真正启动IoC容器的流程在refresh()方法中,这是了解IoC容器启动流程的关键步骤。refresh方法在AbstractApplicationContext中定义,采用模板模式,提供IoC初始化流程的基本实现,子类可以扩展。se软源码
下面分析refresh()方法的每个步骤,以了解IoC容器的启动流程。
prepareRefresh方法主要在refresh执行前进行准备工作,如设置Context的启动时间、状态,以及扩展系统属性相关。
initPropertySources()方法主要用于扩展配置来源,源码精灵翎如网络、物理文件、数据库等加载配置信息。StandardEnvironment默认只提供加载系统变量和应用变量的功能,用于子类扩展。
❝initPropertySources方法常见扩展场景包括:❞
getEnvironment().validateRequiredProperties()确保设置的必要属性在环境中存在,否则抛出异常终止应用。
BeanFactory是Spring的基本IoC容器,ApplicationContext包装了BeanFactory,提供更智能、更便捷的功能。ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();获取的BeanFactory是IoC容器初始化工作的基础。
上面获取的BeanFactory还不能直接使用,需要填充必要的配置信息。至此,IoC容器的启动流程基本完成。
这里对IoC启动流程有个大致、直观的印象。主要步骤包括:准备阶段、配置来源扩展、初始化BeanFactory、填充配置、解析配置类、注册Bean、实例化BeanPostProcessor、初始化国际化和事件机制、以及创建内嵌Servlet容器(在SpringBoot中实现)。这些步骤确保了IoC容器顺利启动并管理Bean。
å¨web.xmlä¸classpathåclasspath*çåºå«
web.xml é ç½®ä¸classpath: ä¸classpath*:çåºå«
é¦å classpathæ¯æ WEB-INFæ件夹ä¸çclassesç®å½
解éclasseså«ä¹ï¼
1.åæ¾åç§èµæºé ç½®æ件 eg.init.properties log4j.properties struts.xml
2.åæ¾æ¨¡æ¿æ件 eg.actionerror.ftl
3.åæ¾classæ件 对åºçæ¯é¡¹ç®å¼åæ¶çsrcç®å½ç¼è¯æ件
æ»ç»ï¼è¿æ¯ä¸ä¸ªå®ä½èµæºçå ¥å£
å¦æä½ ç¥éå¼åè¿ç¨ä¸æè¿ä¹ä¸å¥è¯ï¼æ¯ä¾å¤§äºé ç½® é£ä¹ä¹è®¸ä½ ä¼æ¹åä½ çæ³æ³
对äºç¬¬äºä¸ªé®é¢
è¿ä¸ªæ¶åçæ¯libåclassesä¸æ件访é®ä¼å 级çé®é¢: lib>classes
对äºæ§è½çå½±ååºè¯¥ä¸å¨è¿ä¸ªèç´
classpath å classpath* åºå«ï¼
classpathï¼åªä¼å°ä½ çclassè·¯å¾ä¸æ¥æ¾æ¾æ件;
classpath*ï¼ä¸ä» å å«classè·¯å¾ï¼è¿å æ¬jaræ件ä¸(classè·¯å¾)è¿è¡æ¥æ¾.