⑴ 如何 阅读 spring 源码或者说怎么学习java源码一堆的类从哪开始看
看你想研究什么功能模块,从最关键的类一步步跟踪下去,看它是如何实现功能的。
⑵ 如何查看spring源码
1.准备工作:在官网上下载了Spring源代码之后,导入Eclipse,以方便查询。
2.打开我们使用Spring的项目工程,找到Web.xml这个网站系统配置文件,在其中找到Spring的初始化信息:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
由配置信息可知,我们开始的入口就这里ContextLoaderListener这个监听器。
在源代码中我们找到了这个类,它的定义是:
public class ContextLoaderListener extends ContextLoader
implements ServletContextListener {
…
/**
* Initialize the root web application context.
*/
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
if (this.contextLoader == null) {
this.contextLoader = this;
}
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
...
}
该类继续了ContextLoader并实现了监听器,关于Spring的信息载入配置、初始化便是从这里开始了,具体其他阅读另外写文章来深入了解。
二、关于IOC和AOP
关于Spring IOC 网上很多相关的文章可以阅读,那么我们从中了解到的知识点是什么?
1)IOC容器和AOP切面依赖注入是Spring是核心。
IOC容器为开发者管理对象之间的依赖关系提供了便利和基础服务,其中Bean工厂(BeanFactory)和上下文(ApplicationContext)就是IOC的表现形式。BeanFactory是个接口类,只是对容器提供的最基本服务提供了定义,而DefaultListTableBeanFactory、XmlBeanFactory、ApplicationContext等都是具体的实现。
接口:
public interface BeanFactory {
//这里是对工厂Bean的转义定义,因为如果使用bean的名字检索IOC容器得到的对象是工厂Bean生成的对象,
//如果需要得到工厂Bean本身,需要使用转义的名字来向IOC容器检索
String FACTORY_BEAN_PREFIX = "&";
//这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就象一个大的抽象工厂,用户可以根据名字得到需要的bean
//在Spring中,Bean和普通的JAVA对象不同在于:
//Bean已经包含了我们在Bean定义信息中的依赖关系的处理,同时Bean是已经被放到IOC容器中进行管理了,有它自己的生命周期
Object getBean(String name) throws BeansException;
//这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根名字取得的bean实例的Class类型和需要的不同的话。
Object getBean(String name, Class requiredType) throws BeansException;
//这里提供对bean的检索,看看是否在IOC容器有这个名字的bean
boolean containsBean(String name);
//这里根据bean名字得到bean实例,并同时判断这个bean是不是单件,在配置的时候,默认的Bean被配置成单件形式,如果不需要单件形式,需要用户在Bean定义信息中标注出来,这样IOC容器在每次接受到用户的getBean要求的时候,会生成一个新的Bean返回给客户使用 - 这就是Prototype形式
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//这里对得到bean实例的Class类型
Class getType(String name) throws NoSuchBeanDefinitionException;
//这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
String[] getAliases(String name);
}
实现:
XmlBeanFactory的实现是这样的:
public class XmlBeanFactory extends DefaultListableBeanFactory {
//这里为容器定义了一个默认使用的bean定义读取器,在Spring的使用中,Bean定义信息的读取是容器初始化的一部分,但是在实现上是和容器的注册以及依赖的注入是分开的,这样可以使用灵活的 bean定义读取机制。
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
//这里需要一个Resource类型的Bean定义信息,实际上的定位过程是由Resource的构建过程来完成的。
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
//在初始化函数中使用读取器来对资源进行读取,得到bean定义信息。这里完成整个IOC容器对Bean定义信息的载入和注册过程
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws
BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}
⑶ 怎么阅读Spring源码
学习源码是一件非常耗时费力的事情,需要有足够的时间和持久的耐心,下面是我阅读郝佳老师的《Spring源码深度解析》所做的记录,书中以Spring3.2讲解,使用jdk1.7。
准备工作
1. 安装github:现在spring源代码都在github管理,所以首先需要下载githup,下;
2. 安装gradle构建工具: 下载完后进行解压到任意盘符,然后增加环境变量GRADLE_HOME,并在环境变量bin中增加%GRADLE_HOME%/bin,打开DOS窗口,运行gradle -v,出现版本号等信息,表示安装成功;
3. 下载Spring源码:首先打开git shell,切换到你的工作目录,然后输入以下命令:git clone git://github.com/SpringSource/Spring-framework.git,后面一串是源码下载地址。大概半小时的样子,就可以下载完成,这时候在你的工作目录中就会出现Spring-framework的目录,里面有Spring各组件的源码包;
4. 构建导入:下载下来的代码不能直接导入Eclipse,要先转换成Eclipse能读取的形式。因为所有组件都会依赖spring-core,所有我们首先要转换Spring-core工程,在命令窗口切换到Spring-core工程,运行gradle cleanidea eclipse命令,我们会看到开始下载工程所依赖的jar包,几分钟后执行完毕,再来看Spring-core文件夹,多了.classpath、.project等文件,这是Eclipse工程所必须的,然后可以把他导入到eclipse。因为大部分Spring组件都会用到 spring-beans、spring-context、spring-aop,而他们又依赖spring-expression、spring-instrument,所以我们干脆先把这些工程都进行转换并导入eclipse。
⑷ ECLIPSE下查看spring源码问题
你得从spring网站上把source包下下来,然后把那个包关联一下就可以了
⑸ 请问怎样掌握和学习Spring源代码
想请教一下有对Spring源代码有兴趣,而且是已经深入理解的高手,大侠们。 我曾经多次对Spring源代码进行阅读,都没有收到什么效果,发现太难入手了,我存在的问题就是,无法掌握它的脉络,类的依赖关系太过复杂,感觉每个类都要去阅读。所以这样我掉入了深渊。就很难坚持下去了,而且看了也等于没看一样,我看的目的就是想学习高手在写代码的思想。巧妙之处,以至为我自己所用!能多给点意见。。谢谢啦. 问题补充:补充一点就是,我使用Spring已经有几年了,只是想去认真阅读他的实现原理,和学习优秀的设计。 问题补充:kisa1022 写道最好能参与项目,实践多了自然能有所领悟。阅读代码为主,一般提高的速度很慢的。你可以看好的代码,理解代码中的思想,然后一定要把获取的思想进行实践。谢谢你的回复,我其实用Spring做过好几个项目,只是没有去学习他的内在的实现。我现在就是想提高自己的编码水平。学习大师级别的人如何设计。
⑹ 如何学习springmvc源代码
首先要了解设计模式,这个是阅读大师源码的一个桥梁,很多代码看上去很多,其实就是一种模式。了解了模式后,整个关系图就清楚了。
还有善于分片阅读,找简单的读,可以先读spring jdbc,这部分的模板跟回调看起来会简单点。
然后再看IOC,看IOC之前必须对spring IOC原理掌握的很透彻,怎么扩展,怎么写胶水代码整合其他框架。建议熟读Spring-Reference。
然后再读源码,先学习怎么写出漂亮的代码,再学习怎么设计出漂亮的模式。
⑺ 怎么去看框架源代码
查看框架原代码,你可以去下载源代码的压缩包,再把这个包放到你程序关联的包上面。 forexample:如果你用的是eclipse的话,假设你工程里面用到了spring-2.0.6.jar则你在这个jar上点击右键,点属性,这时在出来的上面有一个java source attachment,你选择后面external file 把你从官网上下载的包关联进来,就ok了,这样你就可以从用到spring源码的地方直接点进来看spring的源码了,或者你直接点jar文件的目录,一样可以看spring的源码。
⑻ Myeclipse下如何查看Spring等框架的源代码
1.下载jad.exe与jadclipse_3.2.0.jar(本地址资源中心中提供);2.将jad.exe可以存放任意目录,比如C:jad.exe;3.将jadclipse_3.2.0.jar放到${eclipse}/plugins目录下,并解压到当前目录下,目录为${eclipse}/plugins/jadclipse_3.2.0;4.打开Myeclipse进行分别设置:选项Windows--Preference--Java-JadClipse下设置Path to decompiler为:C:jad.exe选项Windows--Preference--General--Editor--File Associations下设置File types为*.class的默认打开格式为JadClipse Class File Viewer我是按上面步骤做的,(MyEclipse 6.5)却什么也出不来,是不是我的方法不对? 回答: 你上面的步骤是正确的。我在Myeclipse 5.5上用jadclipse_3.2.0.jar同样的手顺已经取到了源代码。我觉得你用的jadclipse_3.2.0.jar 应该是和你的Eclipe版本不符,低了。我在Myeclipse 7.0 用net.sf.jadclipse_3.3.0.jar 取到了。若换成3.2.0 就不行,出ERROR。