`
coolbi
  • 浏览: 85384 次
  • 性别: Icon_minigender_1
  • 来自: 重庆&南京
社区版块
存档分类
最新评论

模拟Spring装载bean的方式

阅读更多

Spring有一个ClassPathXmlApplicationContext。来获取bena的实例。

下面模拟一下。

新建一个类叫:CoolbiClassPathXmlApplicationContext.java

代码如下:

package com.test.spring;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

public class CoolbiClassPathXmlApplicationContext
{
	
	private ArrayList<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();
	
	private HashMap<String,Object> beans = new HashMap<String,Object>();
	
	public CoolbiClassPathXmlApplicationContext(String configLocation)
	{
		this.readXML(configLocation);
		this.initBean();
	}

	private void initBean()
	{
		for(BeanDefinition bean : beanDefines)
		{
			if(bean.getClassName()!=null && !"".equals(bean.getClassName().trim()))
			{
				try
				{
					beans.put(bean.getId(), (Class.forName(bean.getClassName())).newInstance());
				} catch (InstantiationException e)
				{
					e.printStackTrace();
				} catch (IllegalAccessException e)
				{
					e.printStackTrace();
				} catch (ClassNotFoundException e)
				{
					e.printStackTrace();
				}
			}
		}
	}
	
	public Object getBean(String beanName)
	{
		return beans.get(beanName);
	}

	private void readXML(String configLocation)
	{
		SAXReader saxReader = new SAXReader();   
        Document document=null;   
        try{
         URL xmlpath = this.getClass().getClassLoader().getResource(configLocation);
         document = saxReader.read(xmlpath);
         Map<String,String> nsMap = new HashMap<String,String>();
         nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间
         XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径
         xsub.setNamespaceURIs(nsMap);//设置命名空间
         List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点 
         for(Element element: beans){
            String id = element.attributeValue("id");//获取id属性值
            String clazz = element.attributeValue("class"); //获取class属性值        
            BeanDefinition beanDefine = new BeanDefinition(id, clazz);
            beanDefines.add(beanDefine);
         }   
        }catch(Exception e){   
            e.printStackTrace();
        }
	}

}

 

 

 

 

 

分享到:
评论

相关推荐

    spring IOC反射装载bean

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

    Spring定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...

    spring bean XML配置入门

    Spring支持通过属性值、构造器参数、setter方法等多种方式进行注入。 6. **运行环境与构建工具**: 题目描述中提到的运行环境是Eclipse,这是一个流行的Java集成开发环境,提供了便捷的代码编辑、调试等功能。而...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    本篇将深入探讨如何自定义注解并模拟Spring通过注解方式创建bean实例。 首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取...

    Spring Bean创建初始化流程.docx

    在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...

    spring 获取bean

    spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    Spring的Bean配置

    在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...

    以注解方式模拟Spring IoC AOP

    本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 ### 1. 依赖注入(IoC) 依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    Spring 的bean的作用域总结

    Spring 的bean的作用域总结,详细的总结了 Spring 的bean的作用域

    spring创建bean简单示例

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

    线程中获取spring 注解bean

    当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    在Spring框架中,Bean的生命周期管理是其核心特性之一,然而有时我们可能会遇到Spring Bean重复执行两次的问题,即实例被构造两次。这个问题可能是由多种原因引起的,涉及到Spring的初始化过程和容器的行为。以下是...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    SPRING:bean配置properties

    通过这种方式,可以将不同功能模块的配置信息分开存储,便于维护和管理,同时又能在启动时统一加载到Spring容器中。 ### 多个PropertyPlaceholderConfigurer的协同工作 为了适应更复杂的应用场景,我们还可以配置...

    spring中的bean

    在本篇中,我们将深入探讨"Spring中的Bean"这一主题,包括Bean的定义、配置以及如何在实际应用中使用。 首先,我们需要理解什么是Spring中的Bean。在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring...

    Java中Spring获取bean方法小结

    总结,Spring框架通过BeanFactory和ApplicationContext提供了灵活的方式来管理和获取Bean。开发者可以根据应用需求选择合适的方式,从XML配置到注解注入,再到基于Java的配置,Spring都提供了全面的支持。理解这些...

Global site tag (gtag.js) - Google Analytics