1首先新建一个文件夹,如c:\\myWorkspace 2然后在myWorkspace中再新建一个文件夹,名为你的项目名 3如myProject,然后把你的源代码放到myProject中。 那么现在有文件目录如下 c:\myWorkspace\myProject\src c:\myWorkspace\myProject\bin
Spring源代码的组织结构发表于 天前 Spring 评论数 被围观 views+
首先获得Spring的源代码 可以通过src/svn/spring framework/地址 使用EclipseSVN检出功能或者其他工具获得源代码
Build spring framework是整个Spring源代码的构建目录 里面是项目的构建脚本 如果要自己动手构建Spring 可以进入这个目录使用ANT进行构建
l ntext是IoC容器的源代码目录
l springframework aop是AOP实现的源代码目录
l springframework jdbc是JDBC的源代码部分
l springframework orm是O/R Mapping对应的源代码实现部分
l springframework samples petclinic是Spring提供的一个应用示例的源代码 便于我们开发Spring应用时参考
Spring源代码中的每个包(比如ntext)都以一个相对独立的子项目存在于代码库中 之所以说这些包是子项目 是因为每个包都可以作为独立的项目导入到Eclipse中 都有Eclipse的项目配置文件 有针对这些包的代码的测试用例 这些测试用例组织在src/test目录中 另外还有针对自己包的build构建文件 这些构建文件同时也是构成整个Spring项目构建的一部分 这种代码组织结构使得包之间的相互耦合相对较小 非常有利于各个子模块的并行开发 集成与测试
在每个源代码包中 都有着类似的代码结构划分 比如src是源代码目录 其中的main目录用来存放产品代码 test用来存放测试代码 main里面的java目录用来存放java源文件 而resources目录用来存放资源文件 target目录用来存放编译好的classes文件 这个target名字让我想起了在嵌入式软件的开发系统中也常看到这样的目录 在那些系统里 这些目录常用来存放目标代码 往往还可以针对不同的处理器结构和平台(比如X 平台 PPC平台 arm平台等) 在这里 因为Java的跨平台特性 所以只要一个target即可 也许这些名字也是Java起源于嵌入式系统开发的佐证之一吧 这些代码的组织规划很统一 让整个Spring的源代码看起来非常整齐 浏览起来非常方便
lishixinzhi/Article/program/Java/ky/201311/27928
下面用的是425的源码。
从这个文件开始看:META-INF/springhandlers
文件里的内容是>
MvcNamespaceHandler源码:
从AnnotationConfigApplicationContext切入分析源码,
AnnotationConfigApplicationContext的类图,其中继承了GenericApplicationContext,也继承了BeanDefinitionRegistry
分析这三个重要的方法
thisscanner = new ClassPathBeanDefinitionScanner(this);
实例化了扫面类,但是不是用这个类去扫面要加载的类,那这个类的作用是什么,是我们手动的扫面,看下面的例子
spring源码中会自动的扫描包下的类,比如标注了@Component @Configuration等注解的类,自动扫描的时候,会重新有从新new了一个ClassPathBeanDefinitionScanner(this);后续的文章会分析,那我们想手动的扫描呢,用的就是这个scanner
主要是读取配置类这里就是MyConfigurationclass,要注意的是只是将配置类加载到beanDefinitionMap中,不会去解析,通过refresh()方法解析的 ,并注入了很多的BeanFacrotyPostProcessor
thisreader = new AnnotatedBeanDefinitionReader(this);
AnnotationConfigUtilsregisterAnnotationConfigProcessors(thisregistry);
最终调用AnnotatedBeanDefinitionReader的有参构造器
registerAnnotationConfigProcessors方法
AnnotationConfigApplicationContext构造函数的register(componentClasses);
-->AnnotatedBeanDefinitionReader#register的thisreaderregister(componentClasses);
-->AnnotatedBeanDefinitionReader#doRegisterBean
就是最重要的refresh();方法,再后续的文章分析
spring是大家都会用的ioc框架,但是要真的了解spring还是需要好好研究一下才行,为此看了一些spring源码,所以开始写spring源码分析的文章,这个是第一篇,先从ioc容器的启动开始。
我们都知道,spring的ioc容器的最基本的接口就是BeanFactory,而ApplicationContext是包含了BeanFactory的所有信息,所以ioc容器在启动的时候就是从AbstractApplicationContext的refresh方法开始的
具体的启动流程就不说了,主要是这里有一个onRefresh方法,我们来看AbstractRefreshableWebApplicationContext这个类,在这个类中覆写了onRefresh方法
这是什么东西?别急,我们来看看themeSource是什么。
还是不太明白?那我们来看看AbstractRefreshableWebApplicationContext的结构
原来ThemeSource是一个接口,而AbstractRefreshableWebApplicationContext则实现了这个接口,在onRefresh把自己传进去了,好吧,这块就先看到这里。
我们直接到XmlWebApplicationContext这个类里,我们发现AbstractRefreshableApplicationContext类有一个方法loadBeanDefinitions,而XmlWebApplicationContext覆写了这个方法,我们来看看XmlWebApplicationContext是怎么实现的
这里我们要介绍ioc容器里的一个接口BeanDefinitionReader,而XmlBeanDefinitionReader是BeanDefinitionReader的一个实现类,负责对xml的配置文件进行读取,并放到ioc容器中。当读取完配置文件后,通过loadBeanDefinitions方法将bean注册到ioc容器中。
至此,ioc容器就启动完成。
XmlWebApplicationContext的分析就到这里了。
以上就是关于spring4.2.4的源码在哪全部的内容,包括:spring4.2.4的源码在哪、Spring源代码的组织结构、怎么找到spring注解解析器的源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)