`
polokang
  • 浏览: 66227 次
  • 性别: 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的原理

    03_黑马程序员_黎活明_Spring2.5视频教程_编码剖析Spring管理Bean的原理

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

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

    spring2.5学习PPT 传智博客

    03_编码剖析Spring管理Bean的原理 04_Spring的三种实例化Bean的方式 05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码剖析Spring依赖注入的原理 08_编码剖析Spring装配基本属性的原理 ...

    spring2.5教程(传智)

    03_编码剖析Spring管理Bean的原理 04_Spring的三种实例化Bean的方式 05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码剖析Spring依赖注入的原理 08_编码剖析Spring装配基本属性的原理 09_...

    webx3框架指南PDF教程附学习Demo

    • 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易...

    Spring及其各

    01_全面阐释Spring及其各项功能02_搭建与测试Spring的开发环境03_编码剖析Spring管理Bean的原理

    IDEA使用技巧(基于2018.3.1版本).pptx

    IDEA 使用技巧(基于 2018.3.1 版本) IntelliJ IDEA 是 JetBrains 公司开发的一款集成开发环境(IDE),专门为 Java 语言开发提供强大支持,也可用于其他语言开发。IDEA sahip 众多功能,如智能代码助手、代码自动...

    基于springboot的开放实验室管理系统源码数据库论文.docx

    本文档概述了基于 Spring Boot 的开放实验室管理系统的设计与实现,涵盖了系统的需求分析、技术选型、系统架构设计、数据库设计等方面。 目录 * 绪论 + 课题背景 + 选题主要研究思路和方法 + 选题主要解决的...

    动力节点SSM课件源码分析教程配套资料分享

    通过阅读和理解优秀开源框架源码,掌握开源框架是如何一步一步实现的,深入理解其底层实现原理,领悟大师级设计思想,开阔视野,让思想顿悟,提高源码阅读能力及自我编码能力,提高核心竞争力,那么本套视频课程带你...

    家教信息管理系统毕业设计

    2.2.3 Struts+Spring+Hibernate框架介绍 3 2.2.4 JSP简介 6 2.2.5 MySQL数据库介绍 6 2.2.6 MyEclipse 集成开发环境介绍 6 第3章 系统需求分析 8 3.1 任务概述 8 3.1.1需求概述 8 3.1.2 系统目标 8 3.1.3 运行环境 8...

    spring-boot-java-swing-reservations:该项目旨在介绍如何连接Spring Boot 2和Java Swing GUI小部件工具箱。 所有应用程序依赖项均由Docker Compose提供。 还有一些静态代码分析工具,例如FindBugs和Checkstyle

    Spring Data的JPA模块包含一个允许定义存储库bean的自定义名称空间。 Hibernate ORM使开发人员可以更轻松地编写其数据超出应用程序进程寿命的应用程序。提供一组“轻量级”(所有Java语言)组件,这些组件在最大程度...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    java web技术开发大全(最全最新)

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    美团IDEA插件实现Java应用的热部署实践

    在实际编码工作中,多文件修改是家常便饭,Sonic对多文件的热部署能力尤为突出,它可以通过依赖分析等手段来对多文件批量进行远程热部署,并且支持Spring Bean Class、普通Class、Spring XML、MyBatis XML等多类型...

    非常苛刻的java工作要求

    1. 完成需求分析、软件设计、数据库设计、代码编写、部分文档编写、调试、测试和维护; 2. 系统架构设计、框架设计与实现、系统可行性论证与原型开发; 岗位要求: 1. 精通web jsp,servlet,、Tag、java bean,JMS,...

    java web开发技术大全

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    JAVA上百实例源码以及开源项目源代码

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

Global site tag (gtag.js) - Google Analytics