`
leogao_emcom
  • 浏览: 83633 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring框架核心源代码的分析及其感受-IOC篇-2

阅读更多

在上一篇,我们看到这样的代码:

 

DefaultListableBeanFactory beanFactory = createBeanFactory(); 
.... synchronized (this.beanFactoryMonitor) { this.beanFactory = beanFactory; }

 

知道Application将getBean方法的实现委托给了DefaultListableBeanFactory,在DefaultListableBeanFactory按F4键我们可以看到这样的继承结构:

 

其中XmlBeanFactory我们经常用到,从上图看知道咋回事了吧?我们来看看DefaultListableBeanFactory的getBean方法吧:

public Object getBean(String name) throws BeansException {
		return doGetBean(name, null, null, false);
	}

 doGetBean方法位于AbstractBeanFactory之中,它调用了createBean子方法:

protected abstract Object createBean(String beanName, RootBeanDefinition mbd, Object[] args)
			throws BeanCreationException;

 又是一个抽象方法,看来doGetBean又是一个模板设计模式的具体体现,Spring里面很多很多这样的用法,有时候会转晕,但是没有办法,他们就是这样设计的,至于为什么这么设计,以后再说明!createBean方法被实现在了AbstractAutowireCapableBeanFactory类中:

public <T> T createBean(Class<T> beanClass) throws BeansException {
		// Use prototype bean definition, to avoid registering bean as dependent bean.
		RootBeanDefinition bd = new RootBeanDefinition(beanClass);
		bd.setScope(SCOPE_PROTOTYPE);
		return (T) createBean(beanClass.getName(), bd, null);
	}

 

看到了吧,这里把当前要求的Bean对应的BeanDefinition初始化出来了,作为创建Bean的基础。

protected Object createBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)
			throws BeanCreationException {

		if (logger.isDebugEnabled()) {
			logger.debug("Creating instance of bean '" + beanName + "'");
		}
		// Make sure bean class is actually resolved at this point.
		//也就是看看能不能实例化!
		resolveBeanClass(mbd, beanName);

		// Prepare method overrides.
		try {
			mbd.prepareMethodOverrides();
		}
		catch (BeanDefinitionValidationException ex) {
			throw new BeanDefinitionStoreException(mbd.getResourceDescription(),
					beanName, "Validation of method overrides failed", ex);
		}

		try {
			//如果配置了psotprocessor就返回proxy,动态代理会在取得bean之后的操作后
                                                 //去处理psotprocessor
			// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
			Object bean = resolveBeforeInstantiation(beanName, mbd);
			if (bean != null) {
				return bean;
			}
		}
		catch (Throwable ex) {
			throw new BeanCreationException(mbd.getResourceDescription(), beanName,
					"BeanPostProcessor before instantiation of bean failed", ex);
		}

		Object beanInstance = doCreateBean(beanName, mbd, args);

		if (logger.isDebugEnabled()) {
			logger.debug("Finished creating instance of bean '" + beanName + "'");
		}
		return beanInstance;
	}

 那么doCreateBean应该就是了,请快些看下篇

 

 

 

1
0
分享到:
评论

相关推荐

    Spring框架核心源代码的分析及其感受-6

    《Spring框架核心源代码分析及感悟》 Spring框架作为Java企业级应用开发的基石,其强大的功能和灵活性深受开发者喜爱。深入理解Spring的核心源代码,不仅有助于我们更好地使用这个框架,还能提升我们的编程技艺和对...

    Spring框架核心源代码的分析及其感受.pdf

    Spring框架是Java开发中不可或缺的一部分,它以依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)为核心,提供了丰富的功能来简化企业级应用的开发。当我们深入理解...

    springIOC核心组件分析.vsdx

    pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 ...

    spring框架学习源代码

    Spring框架是Java开发中...总的来说,这份"spring框架学习源代码"涵盖了Spring框架的关键知识点,包括IOC、DI、AOP、bean管理以及与数据库和日志的集成。通过学习和实践,你可以深化对Spring的理解,提高Java开发能力。

    spring核心技术源代码spring核心技术源代码1-9章

    通过阅读并分析这些源代码,开发者可以更深入地理解Spring框架的工作机制,学习如何有效地使用其特性来提高代码的可维护性和可扩展性。每个章节都会提供实际的示例,帮助开发者将理论知识转化为实践技能。对于想要...

    SpringIOC示例源代码

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它负责管理对象的生命周期和依赖关系。在这个示例源代码中,我们可以看到多个Java类和一个bean.xml配置文件,这些都是实现Spring IOC的关键...

    Spring源代码解析

    Spring源代码解析(一):IOC容器 Spring源代码解析(二):IoC容器在Web容器中的启动 Spring源代码解析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源...

    Spring源代码解析(一):IOC容器.doc

    Spring框架的IOC(Inversion of Control,控制反转)容器是其核心组件,它负责管理和装配应用中的对象。在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 ...

    Spring--IOC

    虽然AOP不在本次讨论的"Spring--IOC"主题内,但它是Spring框架的另一个重要特性,它允许我们在不修改已有代码的情况下,添加横切关注点,如日志、事务管理等。 **MyEclipse5.5开发平台** MyEclipse5.5是一款基于...

    Spring-IOC实例

    Spring框架是Java开发中不可或缺的一部分,尤其在企业级应用中,其Inversion of Control(IoC)容器是其核心特性之一。IoC,也被称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理权...

    spring-demo10-注解-IOC.zip

    "spring-demo10-注解-IOC.zip"这个压缩包文件很显然包含了关于Spring框架如何使用注解进行依赖注入的示例代码。接下来,我们将深入探讨Spring中的注解和依赖注入。 依赖注入(DI)是一种设计模式,它允许我们解耦...

    BlueSky-IOC

    对于熟悉Spring框架的开发者来说,学习BlueSky-IOC会相对容易,因为它遵循了类似的依赖注入模式,但同时也有其独特的设计和实现。通过深入了解和实践,开发者不仅可以提升个人技能,还能为团队带来更高效、更灵活的...

    Spring-IOC丐版

    通过分析这个"Spring-IOC丐版"的实现,开发者可以更好地理解Spring是如何工作的,这对于深入学习Spring框架、优化自己的代码或者构建类似的轻量级容器都是非常有帮助的。同时,这也是一个很好的实践案例,可以帮助...

    spring 1.2源代码

    Spring 1.2源代码是Java开发者深入了解Spring框架工作原理的重要资源。这个版本的Spring框架在2004年发布,标志着Spring框架发展的早期阶段,它包含了许多核心特性,为现代企业级Java应用奠定了基础。在这个源代码...

    Spring源代码解析.rar

    Spring源代码解析2:IoC容器在Web容器中的启动.doc Spring源代码解析3:Spring JDBC .doc Spring源代码解析4:Spring MVC .doc Spring源代码解析5:Spring AOP获取Proxy .doc Spring源代码解析6:Spring声明式事务...

    学习spring 框架核心 代码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在本文中,我们将...

    Spring IoC简单示例-注解配置-Maven构建

    在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...

    Spring2.5.6源代码分析(一):IOC容器

    在本篇中,我们将深入探讨Spring框架的核心组件——IoC(Inversion of Control)容器,这是Spring 2.5.6版本的一部分。IoC容器是Spring框架的心脏,它负责管理对象的生命周期和依赖关系,使得开发者能够实现松耦合和...

    Spring IoC简单示例-XML配置-Maven构建

    Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在Spring中就是...

Global site tag (gtag.js) - Google Analytics