b2c信息网

您现在的位置是:首页 > 昨日新闻 > 正文

昨日新闻

如何研究spring源码(spring源码编译)

hacker2022-08-23 21:35:24昨日新闻87
本文目录一览:1、如何高效的学习spring源码2、

本文目录一览:

如何高效的学习spring源码

首先Java的基础、面向对象的基础和设计模式的基础知识是必不可少的。

关于设计模式我觉得不用学太多,但以下三个模式是学习Spring必不可少的:factory模式(包括简单工厂和抽象工厂), Strategy模式,Template method模式。如果不掌握这些你就根本没法领悟Spring的精髓,只能依样画葫芦地照搬,这是很可怕的事。

如何评价spring源码深度解析

您好,希望以下回答能帮助您 《SPRING技术内幕——深入解析SPRING架构与设计原理》 该书讲了spring的ioc容器原理,在xml的spring配置文件中,对象是如何解析并生成的。 spring的aop,面向切面编程。这两块是比较重要的,属于核心部分。 其他的如spring mvc ,spring jdbc与hibernate,ibatise集成,spring事务,spring security, spring 任务调度都有介绍。 大体来说,属于跟着代码走向,一个类一个类介绍了一下。其实代码都是有英文注释的。 跟着作都的思路看过来也还是可以的,最好是对照类图分析。 如您还有疑问可继续追问。

如何研究spring aop源码

您好,希望以下回答能帮助您 《SPRING技术内幕——深入解析SPRING架构与设计原理》 该书讲了spring的ioc容器原理,在xml的spring配置文件中,对象是如何解析并生成的。 spring的aop,面向切面编程。这两块是比较重要的,属于核心部分。

怎么阅读spring源码

从HttpServletBean的init()进入,再到initWebApplicationContext(),再到refresh(),再到refreshBeanFactory(),再到finishRefresh(),直到服务器启动成功。不知道读了多少遍,

但是源码的东西实在的太多了,想要完全读懂,完全理清头绪,还差很远啊。所以我只重点关注了两块内容,就是bean的定位加载解析注册、bean的实例化两大块内容,其他地方稍作了解,没有太过深入。

整个容器的启动流程,都在AbstractApplicationContext的refresh()的模板方法中了。

复制代码

1 public void refresh() throws BeansException, IllegalStateException {

2 synchronized (this.startupShutdownMonitor) {

3 // Prepare this context for refreshing.

4 prepareRefresh();

5

6 // Tell the subclass to refresh the internal bean factory.

7 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

8

9 // Prepare the bean factory for use in this context.

10 prepareBeanFactory(beanFactory);

11

12 try {

13 // Allows post-processing of the bean factory in context subclasses.

14 postProcessBeanFactory(beanFactory);

15

16 // Invoke factory processors registered as beans in the context.

17 invokeBeanFactoryPostProcessors(beanFactory);

18

19 // Register bean processors that intercept bean creation.

20 registerBeanPostProcessors(beanFactory);

21

22 // Initialize message source for this context.

23 initMessageSource();

24

25 // Initialize event multicaster for this context.

26 initApplicationEventMulticaster();

27

28 // Initialize other special beans in specific context subclasses.

29 onRefresh();

30

31 // Check for listener beans and register them.

32 registerListeners();

33

34 // Instantiate all remaining (non-lazy-init) singletons.

35 finishBeanFactoryInitialization(beanFactory);

36

37 // Last step: publish corresponding event.

38 finishRefresh();

39 }

40

41 catch (BeansException ex) {

42 // Destroy already created singletons to avoid dangling resources.

43 destroyBeans();

44

45 // Reset 'active' flag.

46 cancelRefresh(ex);

47

48 // Propagate exception to caller.

49 throw ex;

50 }

51 }

52 }

其实,我并没有上来就看源码,而是先从看书开始,稍微了解,知道了一些关键点,关键流程,自己产生了一堆疑问,然后带着疑问去读源码,读着读着,发现有些疑问就这么解决了。

如何查看spring源码

1.准备工作:在官网上下载了Spring源代码之后,导入Eclipse,以方便查询。

2.打开我们使用Spring的项目工程,找到Web.xml这个网站系统配置文件,在其中找到Spring的初始化信息:

listener

listener-classorg.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);

}

发表评论

评论列表

  • 澄萌喜余(2022-08-24 00:03:58)回复取消回复

    ,我并没有上来就看源码,而是先从看书开始,稍微了解,知道了一些关键点,关键流程,自己产生了一堆疑问,然后带着疑问去读源码,读着读着,发现有些疑问就这么解决了。如何查看spring源码1.准备工作:在官网上下载了Spring源代码之后,导入Eclipse,以方便查询。2.打开我们使用Spri