Spring模拟BeanFactory实现

实现Spring中BeanFactory的案例

1.设计模式(工厂)

2.jdom

3.Java反射机制

1.beans.xml

2.DAO

3.Impl

4.Service

5.BeanFactory

6.ClassPathXmlApplication

public class ClassPathXmlApplicationContext implements BeanFactory {

    private Map<String, Object> beans = new HashMap<String, Object>();

    public ClassPathXmlApplicationContext() throws Exception {
        SAXBuilder sb = new SAXBuilder();
        // 构造文档对象
        Document doc = sb.build(this.getClass().getClassLoader()
                .getResourceAsStream("beans.xml"));
        // 获取元素HD
        Element root = doc.getRootElement();
        // 取得名字为bean的所有元素
        List list = root.getChildren("bean");
        //
        for (int i = 0; i < list.size(); i++) {
            Element element = (Element) list.get(i);
            String id = element.getAttributeValue("id");
            String classes = element.getAttributeValue("class");
            Object o = Class.forName(classes).newInstance();
            System.out.println(id);
            System.out.println(classes);
            beans.put(id, o);
            for (Element propertyElement : (List<Element>) element
                    .getChildren("property")) {
                String name = propertyElement.getAttributeValue("name");
                String bean = propertyElement.getAttributeValue("bean");
                Object beanObject = beans.get(bean);
                String methodName = "set" + name;
                System.out.println("method name = " + methodName);
                Method m = o.getClass().getMethod(methodName,
                        beanObject.getClass().getInterfaces()[0]);
                m.invoke(o, beanObject);
            }
        }

    }

    /*
     * (non-Javadoc)
     *
     * @see com.yg.Spring.BeanFactory#getBean(java.lang.String)
     */
    @Override
    public Object getBean(String id) {
        // TODO Auto-generated method stub
        return beans.get(id);
    }

}

7.Test

时间: 2024-08-02 01:38:08

Spring模拟BeanFactory实现的相关文章

好记性不如烂笔头83-spring3学习(4)-spring的BeanFactory(IoC容器)

我们一般把BeanFactory叫做IoC容器,叫ApplicationContext 为应用上下文(或者Spring容器) BeanFactory是spring框架的核心,实现依赖注入[使个组件的依赖关系从代码中独立出来,使用配置文件即可实现这种依赖关系]和bean声明周期的管理 . BeanFactory[IoC容器]启动过程:分为两个阶段,一个是容器启动阶段,另外一个是Bean实例化阶段 容器启动阶段:加载配置 -–> 分析配置信息 -–>装备到BeanDefinition -–>

Spring 模拟注解开发实例

1.注解开发无需导入全新的jar包 l使用注解功能需要导入Spring核心jar包 ?核心jar包(6个) ?spring-beans-3.2.0.RELEASE.jar ?spring-context-3.2.0.RELEASE.jar ?spring-core-3.2.0.RELEASE.jar ?spring-expression-3.2.0.RELEASE.jar ?commons-logging-1.1.1.jar ?log4j-1.2.15.jar 2.使用注解开发必须开启命名空间c

Spring之BeanFactory与ApplicationConText区别

使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class XmlConfigWithBeanFactory {     public static void main(String[] args) { XmlBeanFactory facto

Spring的BeanFactory体系结构(一)

本文使用的代码是: Spring 3.0 接 触Spring也有很长一段时间了.但是,每次都是直接使用Spring直接提供的API,时间久了,自然也会想探索Spring里面的奥秘.今天上 午,整理出了Spring的BeanFactory的一个体系结构(当然不是完整的,是以XmlFactory为最终目标),如下图(点击可到图片页 面): 图下次补上. 沿着XmlBeanFactory向上追溯,可以形成上面的BeanFactory体系结构.虽然不是 很全面,但是如果这个图能理解透,我相 信,Spri

spring的beanFactory继承体系

一.BeanFactory 是 Spring 的“心脏”.它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. BeanFactory:是IOC容器的核心接口, 它定义了IOC的基本功能,我们看到它主要定义了getBean方法.getBean方法是IOC容器获取bean对象和引发依赖注入的起点.方法的功能是返回特定的名称的Bean. BeanFactory 是初始化 Bean 和调用它们生命周期方法的“吃苦耐劳者”.注意,Bea

Spring中BeanFactory与FactoryBean的区别

在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混. 一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean().containsBean()等管理Bean的通用方法.Spring的容器都是它的具体实现如: DefaultListableBeanFactory XmlBeanFactory ApplicationContext 这些实现类又从

Spring - 模拟Spring

这个是以前的笔记,现在整理到博客把 这篇博客主要的目的是要简单的理解Spring的实现过程,模拟了Spring的读取配置文件 用户管理 首先有一个类:User private String username; private String password; // get set - 面向接口(抽象)编程,灵活性就出来了,比如说,换数据库直接在有一个OracleImpl的实现类就可以了.然后使用接口new OracleImpl(). 添加对老师的管理等,就要添加一个TeacherService和

spring 之 BeanFactory

顾名思义,BeanFactory其实就是Bean工厂,运用了工厂模式,用来产生Bean.在spring中有几种BeanFactory的实现,现在就来聊聊,简单说一下: 1.XmlBeanFactory:他好几种不同的构造方法,现在说说最常见的一个是利用FileSystemResource来构造:BeanFactory factory = new XmlBeanFactory(new FileSystemResource("c:/beans.xml")); 这段简单的代码告诉bean工厂

Spring的beanFactory与ApplicationContext区别

BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP功能.Web应用等.   ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能.ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功