spring_简易工厂模式MyBeanFactory

1.先导入依赖

        <!--引入dom4J-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

工厂类

package com.studay.factory;

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

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * ClassName: MyBeanFactory <br/>
 * Description: <br/>
 *创建自己的工厂类
 * @author lp <br/>
 */
public class MyBeanFactory {
    //创建一个map集合,模拟IOC容器
    private static Map<String,Object> map = new HashMap<String, Object>();

    static{
        try{
            //使用dom4j 解析xml文件
            //第一步 :获得一个解析器
            SAXReader saxReader = new SAXReader();
            //第二步:读取外部的配置文件
            String path = "src/main/resources/applicationContext.xml";
            //第三步:读取整个文档对象
            Document document = saxReader.read(path);
            //第四步:获取根节点
            Element rootElement = document.getRootElement();
            //第五步:获取根节点下的所有bean 标签对应的节点:
            List<Element> beans = rootElement.elements("bean");//bean
            //第六步 :
            for (Element bean : beans){
                //获取id属性对应的值
                String id = bean.attributeValue("id");
                //获取class属性对应的值:【全限定类名】
                String aClass = bean.attributeValue("class");
                //通过反射创建对象
                Class<?> clz = Class.forName(aClass);
                //创建对象
                Object o = clz.newInstance();
                //存容器 id做key值,创建出来的对象为value值
                map.put(id,o);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 根据id从容器当中获得对象
     *@param  id id的名称
     *@return 返回object类型的对象
     */
    public static Object getBean(String id){
        return  map.get(id);

    }
}

测试类

    @Test
    public void test1(){
        //1.获取ioc容器对象
        MyBeanFactory myBeanFactory = new MyBeanFactory();
        //2.从容器获取bean对象
        User user = (User)myBeanFactory.getBean("user");
        user.say();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值