`

spring管理bean原理

阅读更多

1、读取config.xml文件的bean标签放入数组,读取内容包括id和class。
2、循环数组并根据class路径利用反射机制实例化Bean,并放入Map。
3、根据传入的BeanId获取Map中对应的bean实例。

package com.yt.core.yl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.yt.spring.user.UserBean;

/**
 * @Description: Spring管理Bean原理
 * @ClassName: ClassPathXMLApplicationContext
 * @Project: spring-aop
 * @Author: zxf
 * @Date: 2011-6-3
 */
public class ClassPathXMLApplicationContext {

	Logger log = Logger.getLogger(ClassPathXMLApplicationContext.class);

	List<BeanDefinition> beanList = new ArrayList<BeanDefinition>();
	Map<String, Object> sigletions = new HashMap<String, Object>();

	public ClassPathXMLApplicationContext(String fileName) {
		this.readXML(fileName);
		this.instancesBean();
	}

	/**
	 * 读取Bean配置文件
	 * 
	 * @param fileName
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public void readXML(String fileName) {
		Document document = null;
		SAXReader saxReader = new SAXReader();
		try {
			ClassLoader classLoader = Thread.currentThread()
					.getContextClassLoader();
			document = saxReader
					.read(classLoader.getResourceAsStream(fileName));
			Element beans = document.getRootElement();
			for (Iterator<Element> beansList = beans.elementIterator(); beansList
					.hasNext();) {
				Element element = beansList.next();
				BeanDefinition bean = new BeanDefinition(
						element.attributeValue("id"),
						element.attributeValue("class"));
				beanList.add(bean);
			}
		} catch (DocumentException e) {
			log.info("读取配置文件出错....");
		}
	}
	
	/**
	 * 实例化Bean
	 */
	public void instancesBean() {
		for (BeanDefinition bean : beanList) {
			try {
				sigletions.put(bean.getId(), Class.forName(bean.getClassName())
						.newInstance());
			} catch (Exception e) {
				log.info("实例化Bean出错...");
			}
		}
	}
	
	/**
	 * 获取Map中的对应的bean实例
	 * @param beanId
	 * @return
	 */
	public Object getBean(String beanId) {
		return sigletions.get(beanId);
	}


	public static void main(String[] args) {
		ClassPathXMLApplicationContext path = new ClassPathXMLApplicationContext(
				"config.xml");
		UserBean userBean = (UserBean)path.getBean("userBean");
		userBean.setUserName("zxf_noimp");
		System.out.println(userBean.getUserName());
	}
}
 
package com.yt.core.yl;

/**
 * @Description:
 * @ClassName: BeanDefinition
 * @Project: spring-aop
 * @Author: zxf
 * @Date: 2011-6-3
 */
public class BeanDefinition {

	public String id;
	public String className;

	public BeanDefinition(String id, String className) {
		this.id = id;
		this.className = className;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

}
 

 

分享到:
评论

相关推荐

    Spring2.5视频教程_编码剖析Spring管理Bean的原理

    《Spring2.5视频教程:编码剖析Spring管理Bean的原理》是由知名教育机构黑马程序员的讲师黎活明主讲的一套教程,旨在深入解析Spring框架2.5版本中Bean的管理机制。本教程通过实际编码演示,帮助学习者理解Spring如何...

    搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理

    这个是搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理的代码,适合刚接触spring的人学习,如何搭建spring开发环境,以及了解spring是如何管理bean的。这个是由传智播客的老师讲的。

    spring管理bean应用实例代码

    在Spring框架中,Bean管理是核心功能之一,它允许开发者通过声明式的方式配置和管理...这个压缩包中的实例代码应该涵盖了这些概念的实际运用,通过学习和运行这些代码,你可以更深入地理解Spring管理Bean的工作原理。

    Spring bean 管理

    在这个文件中,开发者定义需要Spring管理的Bean,并且配置相应的属性和依赖关系。 - 三种实例化Bean的方式: - 使用类构造器实例化:这是最简单的实例化方式,Spring将调用无参构造器创建Bean的实例。 - 使用静态...

    spring自动扫描和管理Bean的示例

    通过分析这个示例,你可以更好地理解Spring自动扫描和管理Bean的工作原理,以及如何在实际项目中应用这些概念。 总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动...

    springIoc实现原理

    5. **Bean管理**:Spring容器负责Bean的生命周期管理,包括销毁等操作。 **六、应用场景** Spring Ioc广泛应用于各种项目中,如: - 数据访问层(DAO):通过Ioc管理数据库连接和事务。 - 业务逻辑层(Service)...

    spring创建bean简单示例

    在Spring框架中,Bean是核心概念,它是Spring管理的对象,通常代表了应用程序中的业务对象或服务。本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转...

    Spring的bean生命周期

    Spring框架是Java应用程序开发中的核心组件,其管理Bean的生命周期是其重要特性之一。Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及...

    Quartz注入Spring的Bean

    Spring则是一个广泛应用的IoC(控制反转)和AOP(面向切面编程)容器,它提供了丰富的功能来管理Bean以及整个应用程序的生命周期。将Quartz与Spring结合,可以利用Spring的优秀特性来管理和控制Quartz的Job,使调度...

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    spring IOC反射装载bean

    在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...

    Spring在应用中获得Bean的方法

    在Spring框架中,管理Bean是其核心功能之一。Bean是由Spring容器创建、初始化、装配以及管理的对象,它们在应用程序中扮演着重要的角色。本篇文章将深入探讨如何在Spring应用中获取Bean,以及相关的源码分析和实用...

    spring bean的生命周期测试代码

    在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    1. Dependency Injection:依赖注入,通过容器管理Bean的生命周期和依赖关系。 2. Inversion of Control:控制反转,通过容器管理应用程序的控制流程。 3. Aspect-Oriented Programming:面向方面编程,通过动态代理...

    Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf

    * IoC容器(Inversion of Control):Spring的核心是IoC容器,IoC容器负责管理Bean的生命周期和依赖关系。 * 依赖注入(Dependency Injection): Spring使用依赖注入来解耦合应用程序中的组件,提高系统的灵活性...

    webservice7 spring的bean发布为webservice

    通过结合Axis2的Spring感知特性,可以非常简便地将Spring管理下的JavaBean发布为WebService。本文将详细介绍如何通过Spring框架和Axis2实现这一过程。 #### 一、准备工作 为了确保Web应用能够成功运行,并且能够将...

    对Spring中注解怎么实现的一些基本原理

    2. **注册Bean**:找到的注解类会被注册为Spring Bean,例如,`@Component`注解的类会被视为Spring管理的组件。`@Service`、`@Repository`和`@Controller`是对`@Component`的特殊化,分别代表服务层、数据访问层和...

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...

Global site tag (gtag.js) - Google Analytics