`
wang4674890
  • 浏览: 88957 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

DefaultListableBeanFactory研究

    博客分类:
  • java
 
阅读更多

DefaultSingletonBeanRegistry完成对单例bean的控制
AbstractBeanFactory完成对不同getBean请求的响应,查询Bean定义及销毁方法的注册
AbstractAutowireCapableBeanFactory完成Bean的创建,属性的注入,切面代理的产生,bean的生命周期的管理
最后由DefaultListableBeanFactory提供registerBeanDefinition方法完成bean定义的注册

写道
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException {

		Assert.hasText(beanName, "Bean name must not be empty");
		Assert.notNull(beanDefinition, "BeanDefinition must not be null");

		if (beanDefinition instanceof AbstractBeanDefinition) {
			try {
				((AbstractBeanDefinition) beanDefinition).validate();
			}
			catch (BeanDefinitionValidationException ex) {
				throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
						"Validation of bean definition failed", ex);
			}
		}

		synchronized (this.beanDefinitionMap) {
			Object oldBeanDefinition = this.beanDefinitionMap.get(beanName);
			if (oldBeanDefinition != null) {
				if (!this.allowBeanDefinitionOverriding) {
					throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
							"Cannot register bean definition [" + beanDefinition + "] for bean '" + beanName +
							"': There is already [" + oldBeanDefinition + "] bound.");
				}
				else {
					if (this.logger.isInfoEnabled()) {
						this.logger.info("Overriding bean definition for bean '" + beanName +
								"': replacing [" + oldBeanDefinition + "] with [" + beanDefinition + "]");
					}
				}
			}
			else {
				this.beanDefinitionNames.add(beanName);
				this.frozenBeanDefinitionNames = null;
			}
			this.beanDefinitionMap.put(beanName, beanDefinition);

			resetBeanDefinition(beanName);
		}
	}
  

 这个方法实现了BeanDefinitionRegistry接口的registerBeanDefinition()方法

分享到:
评论

相关推荐

    spring源码研究

    研究DefaultListableBeanFactory和AbstractApplicationContext,我们可以看到Bean的加载、实例化和初始化的细节。 在"tiny-spring-master"这个项目中,可能是对Spring框架的一个简化版实现,它可以帮助初学者更直观...

    Spring源代码自我解析

    通过学习和研究Spring源码,不仅可以快速提升个人的Java技术水平,还能深刻理解高级设计模式的应用以及如何构建高质量的软件系统。 #### 二、Spring的IoC容器解析 IoC(Inversion of Control)即控制反转,是...

    spring第三天.pdf

    例如,`XmlBeanFactory`的构造函数和`XmlBeanDefinitionReader#loadBeanDefinitions()`方法是开始研究的入口点。 接着,是Bean实例创建的流程。在`DefaultListableBeanFactory`中,可以通过`getBean()`方法获取到一...

    spring-study:该项目用于研究spring各种技巧,包括spring4源码分析!

    - **IoC容器**:深入理解DefaultListableBeanFactory和ApplicationContext的实现,了解Bean的加载、管理以及容器的扩展点。 4. **学习资源** - **Spring官方文档**:详尽的官方文档是学习Spring的基础,包括教程...

    Spring源码jar

    总的来说,Spring 4.2的源码研究可以帮助我们深入了解IoC容器的运作机制,掌握Bean的生命周期管理,以及如何通过扩展Spring来实现自定义功能。通过深入学习,我们可以更好地优化我们的代码,提高应用程序的可维护性...

    Spring:研究Spring源码,一步一步实现Spring

    `DefaultListableBeanFactory`是Spring中最基本的Bean工厂实现,它支持基于XML的配置。 3. **ApplicationContext** `ApplicationContext`扩展了Bean工厂,提供了更多的企业级服务,如消息资源、事件发布和AOP代理...

    Spring高级源码学习笔记.zip

    源码中,BeanDefinition类存储了关于Bean的所有元数据,而DefaultListableBeanFactory则是实现Bean容器的主要类。 接着,深入AOP部分,Spring的AOP允许我们在不修改原有代码的情况下,为方法添加额外的功能,如日志...

    Spring框架源码的下载

    源码中,我们可以找到BeanFactory和ApplicationContext接口,以及它们的实现类,如DefaultListableBeanFactory,这些类是理解IoC容器如何加载和管理bean的关键。同时,我们还可以研究XML配置解析的过程,理解如何将...

    spring框架所需jar包源代码(sources)

    例如,你可以看到`org.springframework.beans.factory.BeanFactory`接口和它的实现,如`DefaultListableBeanFactory`,它们是如何解析和实例化bean的。 其次,`module-sources`可能包含了Spring框架的其他模块的源...

    spring源码剖析

    《Spring源码剖析:深入理解对象管理机制》 在软件开发领域,Spring框架以其强大...通过深入研究这部分源码,我们可以更深入地理解Spring框架的工作原理,从而更好地利用和定制Spring,提升我们的开发效率和软件质量。

    Spring框架源码

    通过对`DefaultListableBeanFactory`、`AbstractAutowireCapableBeanFactory`等关键类的阅读,可以了解Spring如何实现依赖注入。同时,`MethodBeforeAdvice`、`AfterReturningAdvice`等接口展示了AOP的工作机制。...

    spring源代码

    深入研究Spring 2.5.6的源代码,可以帮助我们理解其内部工作原理,提升问题排查能力,并为向更高版本迁移打下坚实基础。同时,这也有助于学习软件设计原则和最佳实践,例如工厂模式、代理模式、观察者模式等。通过...

    二、Spring源码分析——BeanFactory

    《Spring源码分析——BeanFactory》 在Java的IoC(Inversion of Control)和DI(Dependency Injection)领域,...通过不断实践和研究源码,我们可以更深入地理解Spring的工作原理,从而更好地利用这个强大的工具。

    java SOURSE

    - 容器实现:深入研究DefaultListableBeanFactory和XmlBeanDefinitionReader等关键类,理解Spring如何加载和管理Bean定义。 - 模板类:如RestTemplate、JdbcTemplate等,它们简化了网络请求和数据库操作。 4. ...

    SpringFactory.java

    《SpringFactory.java——深入解析Spring框架中的Bean工厂》 ...通过深入研究"SpringFactory.java"的源码,我们可以更深入地理解Spring的内部机制,从而更好地利用这个强大的工具来构建复杂的企业级应用。

    spring加载

    深入理解Spring的加载机制,还需要对源码进行研究。例如,可以关注`DefaultListableBeanFactory`的`doCreateBean`方法,了解bean的实例化和初始化过程;`BeanDefinitionReader`的`loadBeanDefinitions`方法,学习...

    spring1.2.6源码

    在源码中,可以深入研究`DefaultListableBeanFactory`是如何根据XML配置文件或注解来创建bean的。 4. **数据访问/集成(Data Access/Integration)**:Spring支持多种数据访问技术,如JDBC、ORM(Hibernate、JPA)...

    A Problem-Solution Approach Spring 源码和书

    Spring框架提供了多种容器,如DefaultListableBeanFactory和ApplicationContext,它们负责管理bean的生命周期和装配。在源码中,你可以看到这些容器如何加载配置、实例化bean并处理依赖关系。深入源码有助于理解...

    spring-framework-5.2.0.RELEASE-master.zip

    例如,解析`DefaultListableBeanFactory`如何根据XML或Java配置来实例化和管理bean,`AbstractAopProxy`是如何创建代理对象以实现AOP功能,以及`ProxyConfig`类如何配置切面等。 在"spring-framework-5.2.0.RELEASE...

    spring4.0.5源码

    `BeanDefinition`类定义了bean的属性和依赖,而`DefaultListableBeanFactory`实现了bean的创建和依赖注入。 二、AOP(Aspect Oriented Programming)切面编程 Spring的AOP模块提供了面向切面的编程功能,使得我们...

Global site tag (gtag.js) - Google Analytics