`
polokang
  • 浏览: 67879 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

3.编码剖析Spring管理Bean的原理

阅读更多
一.使用dom4j读取spring 配置文件
package junit.test;

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.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

public class ZhkClassPathXMLApplicationContext
{
    private List<BeanDefinition> beanDefinitions = new ArrayList<BeanDefinition>();
    private Map<String,Object> singletones = new HashMap<String,Object>();
    
    public ZhkClassPathXMLApplicationContext(String filename)
    {
        this.readXML(filename);
        this.instanceBeans();
    }
    //完成bean实例化
    private void instanceBeans()
    {
        for(BeanDefinition beanDefine : beanDefinitions)
        {
            try
            {                
                if (null != beanDefine.getClassName() && !"".equals(beanDefine.getClassName().trim()))
                {
                    singletones.put(beanDefine.getId(),
                            Class.forName(beanDefine.getClassName())
                                    .newInstance());
                }
            }
            catch (Exception e)
            {               
                e.printStackTrace();
            }         
        }
    }
    
    /** <读取配置文件>
     * @param filename [参数说明]
     */
    private void readXML(String filename)
    {
        SAXReader saxReader = new SAXReader();
        Document document = null;
        try
        {
            URL xmlpath = this.getClass()
                    .getClassLoader()
                    .getResource(filename);
            
            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 className = element.attributeValue("class"); //获取class属性值
                BeanDefinition beanDefine = new BeanDefinition(id,className);
                beanDefinitions.add(beanDefine);               
            }            
        }
        catch (DocumentException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }     
    }
    
    
    /** <获取bean实例>
     * @param beanName
     */
    public Object getBean(String beanName)
    {
        return this.singletones.get(beanName);
        
    }
}


package junit.test;

public class BeanDefinition
{
    private String id;
    private 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;
    }
    
}


package junit.test;


import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.service.PersonService;

public class SpringTest
{
    
    @BeforeClass
    public static void setUpBeforeClass() throws Exception
    {
    }
    @Test public void instanceSpring()
    {
        ZhkClassPathXMLApplicationContext ctx = new ZhkClassPathXMLApplicationContext("beans.xml");
        PersonService personservice = (PersonService)ctx.getBean("personService");
        personservice.save();
    }
}
分享到:
评论

相关推荐

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

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

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

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

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

    编码剖析Spring装配基本属性的原理

    比如,`@Component`家族注解标识一个类作为Spring管理的bean,`@Autowired`自动装配依赖,`@Value`注入值,`@PostConstruct`和`@PreDestroy`分别标记初始化和销毁方法。 3. 配置源: Spring的配置源可以是XML文件...

    spring-framework-5.2.25.RELEASE.tar.gz

    在容器方面,Spring Framework 5.2.25.RELEASE对Bean生命周期的管理进行了改进,新增了生命周期回调方法,让开发者能更精确地控制Bean的创建和销毁过程。同时,它还增强了对Java EE和Jakarta EE标准的支持,如JMS、...

    编码剖析Spring依赖注入的原理

    本文将深入解析Spring中的依赖注入原理,帮助开发者更好地理解和应用这一核心功能。 依赖注入(Dependency Injection,简称DI)是Spring框架的核心之一,它允许组件之间的依赖关系在运行时由外部容器来管理,而不是...

    Spring3.x企业应用开发实战光盘源码

    《Spring3.x企业应用开发实战》是一本...通过分析和实践这些源码,读者可以深入理解Spring3.x框架的工作原理,掌握企业级应用开发的关键技能。同时,结合书中的理论知识,可以更好地将理论与实践相结合,提升开发能力。

    spring原理技术详细解析 深入剖析

    3. **Bean容器**:Spring的Bean工厂和ApplicationContext是管理对象的核心组件。它们负责实例化、配置、初始化和装配对象,是Spring进行DI的基础。 4. **IoC容器**:IoC(Inversion of Control,控制反转)是DI的另...

    Spring框架的设计原理及设计模式分析 2

    ### Spring框架的设计原理及设计模式分析 #### 一、Spring框架的核心组件及其作用 Spring框架作为Java企业级应用开发中最受欢迎的开源框架之一,它的设计理念和技术实现方式深受开发者喜爱。Spring框架由多个组件...

    spring-framework-1.0-m1.zip源码

    3. AOP(面向切面编程):Spring 1.0开始引入AOP,尽管当时功能相对较弱,但已经能够实现简单的切面定义和通知,为日后的事务管理、日志记录等提供了便利。 四、XML配置 XML配置是Spring 1.0中的主要配置方式,...

    官方原版源码spring-framework-5.1.0.RELEASE.zip

    《深入剖析Spring Framework 5.1.0.RELEASE源码》 Spring Framework是Java开发中的一个核心框架,它为创建可维护、可扩展且松耦合的Java应用程序提供了全面的基础。5.1.0.RELEASE版本是Spring发展的一个重要里程碑...

    spring[1]-使用ImportBeanDefinitionRegistrar自定义注册bean(基于源码).zip

    这个接口主要用于扩展Spring配置,使得我们可以在不编写XML配置或使用`@Configuration`注解类的情况下,根据某些条件动态地注册bean。下面将详细探讨`ImportBeanDefinitionRegistrar`的工作原理、使用场景以及如何...

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

    《Spring技术内幕:深入解析Spring架构与设计原理》是一本深度剖析Spring框架核心概念和技术的专著。本书旨在帮助读者理解Spring的内在运作机制,掌握其设计思想,并能灵活运用到实际开发中。通过深入学习,我们可以...

    Spring3.x企业应用开发实战源码.rar

    《Spring3.x企业应用开发实战》...通过分析和运行这些源码,读者能深入理解Spring框架的工作原理,以及如何在实际项目中应用。每个文件夹都可以作为一个独立的学习单元,逐步提升读者在Spring 3.x开发中的技能和经验。

    深入解析SPRING架构与设计原理(第2版) 带标签 高清版,深入剖析spring运行机制

    1. **依赖注入**:Spring的核心特性之一,通过DI,对象之间的依赖关系不再硬编码,而是由容器在运行时动态管理和维护。这提高了代码的可测试性和可维护性。 2. **AOP**:Spring的AOP模块允许开发者定义“切面”,...

    Spring2(源码)

    源码分析是理解Spring工作原理的关键,能帮助开发者深入掌握如何在实际项目中有效地使用和优化Spring。下面将对Spring框架的核心组件、设计理念以及源码中的关键部分进行详细的解释。 1. **依赖注入(DI)** - ...

    Spring 3.x企业应用开发实战3,16.pdf

    - Spring的核心特性之一就是依赖注入,它允许对象之间的依赖关系被外部容器管理,而非对象内部硬编码。这样提高了代码的可测试性和可维护性。 3. **Spring MVC**: - Spring MVC是Spring框架的一个模块,用于构建...

    spring 原理与代码分析

    本篇文章将深入探讨Spring框架的工作原理和代码分析,帮助你更好地理解和掌握其精髓。 1. **依赖注入(DI)**: - DI是Spring的核心特性,它允许对象之间的依赖关系在运行时通过配置文件或注解来管理,而不是硬...

    spring高级源码笔记.pdf

    1. **依赖注入(DI)**:DI是一种设计模式,它允许组件之间的依赖关系在运行时由外部容器(在Spring中是IoC容器)管理,而不是在组件内部硬编码。这样可以降低组件间的耦合度,提高代码的可测试性和可维护性。Spring...

    spring3.2.x源码 for Eclipse

    DI是Spring的核心特性之一,允许开发者将对象的依赖关系通过配置文件或注解来管理,而不是硬编码在类内部。这增强了代码的可测试性和可维护性。 3. **面向切面编程(Aspect-Oriented Programming, AOP)** AOP...

Global site tag (gtag.js) - Google Analytics