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的原理》是由知名教育机构黑马程序员的讲师黎活明主讲的一套教程,旨在深入解析Spring框架2.5版本中Bean的管理机制。本教程通过实际编码演示,帮助学习者理解Spring如何...
这个是搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理的代码,适合刚接触spring的人学习,如何搭建spring开发环境,以及了解spring是如何管理bean的。这个是由传智播客的老师讲的。
在Spring框架中,Bean管理是核心功能之一,它允许开发者通过声明式的方式配置和管理...这个压缩包中的实例代码应该涵盖了这些概念的实际运用,通过学习和运行这些代码,你可以更深入地理解Spring管理Bean的工作原理。
在这个文件中,开发者定义需要Spring管理的Bean,并且配置相应的属性和依赖关系。 - 三种实例化Bean的方式: - 使用类构造器实例化:这是最简单的实例化方式,Spring将调用无参构造器创建Bean的实例。 - 使用静态...
通过分析这个示例,你可以更好地理解Spring自动扫描和管理Bean的工作原理,以及如何在实际项目中应用这些概念。 总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动...
5. **Bean管理**:Spring容器负责Bean的生命周期管理,包括销毁等操作。 **六、应用场景** Spring Ioc广泛应用于各种项目中,如: - 数据访问层(DAO):通过Ioc管理数据库连接和事务。 - 业务逻辑层(Service)...
在Spring框架中,Bean是核心概念,它是Spring管理的对象,通常代表了应用程序中的业务对象或服务。本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转...
Spring框架是Java应用程序开发中的核心组件,其管理Bean的生命周期是其重要特性之一。Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及...
Spring则是一个广泛应用的IoC(控制反转)和AOP(面向切面编程)容器,它提供了丰富的功能来管理Bean以及整个应用程序的生命周期。将Quartz与Spring结合,可以利用Spring的优秀特性来管理和控制Quartz的Job,使调度...
在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...
在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...
在Spring框架中,管理Bean是其核心功能之一。Bean是由Spring容器创建、初始化、装配以及管理的对象,它们在应用程序中扮演着重要的角色。本篇文章将深入探讨如何在Spring应用中获取Bean,以及相关的源码分析和实用...
在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...
1. Dependency Injection:依赖注入,通过容器管理Bean的生命周期和依赖关系。 2. Inversion of Control:控制反转,通过容器管理应用程序的控制流程。 3. Aspect-Oriented Programming:面向方面编程,通过动态代理...
* IoC容器(Inversion of Control):Spring的核心是IoC容器,IoC容器负责管理Bean的生命周期和依赖关系。 * 依赖注入(Dependency Injection): Spring使用依赖注入来解耦合应用程序中的组件,提高系统的灵活性...
通过结合Axis2的Spring感知特性,可以非常简便地将Spring管理下的JavaBean发布为WebService。本文将详细介绍如何通过Spring框架和Axis2实现这一过程。 #### 一、准备工作 为了确保Web应用能够成功运行,并且能够将...
2. **注册Bean**:找到的注解类会被注册为Spring Bean,例如,`@Component`注解的类会被视为Spring管理的组件。`@Service`、`@Repository`和`@Controller`是对`@Component`的特殊化,分别代表服务层、数据访问层和...
SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...