Spring框架的ioc容器核心功能模拟实现

  1. ioc:Inversion of Control(控制翻转)(自称:IOC容器)
    1. 简单的说:就是将创建对象的权利,从开发人员的手里转换到IOC手里(有IOC帮助创建对象)
  2. 功能需求模拟:
    1. 将属性文件的内容读取出来
    2. 存放在一个Map容器中,对外提供一个Get方法,通过Key值来取得值
    3. 根据key取出来的值,来创建一个对象,并且将key为键,Object为值存放在容器中,需要什么时,通过key来获取的对象
  3. 实现步骤:
    1. 在根目录下创建一个ApplicationContext.xml的文件
      1. 目的:
        1. 添加测试代码(ApplicationContext.xml)代码如下

dao=com.bjsxt.lc.spring.dao.impl.DaoMySqlImpl
dao2 =com.bjsxt.lc.spring.dao.impl.DaoOracleImpl

2、创建POJO接口

package com.bjsxt.lc.spring.dao;

public interface IDao
{

	void cave();
	
	void update();
	
}
 
3、创建POJO实现类

package com.bjsxt.lc.spring.dao.impl;

import com.bjsxt.lc.spring.dao.IDao;
/**
 * 模拟两个数据库之间的切换
 * @author Administrator
 *
 */
public class DaoMySqlImpl implements IDao
{
	/**
	 * 调用Mysql的方法
	 */
	public  DaoMySqlImpl()
	{
		System.out.println("--构造器被执行了--->--DaoMySqlImpl----");
	}
	@Override
	public void cave()
	{
		System.out.println("---DaoMySqlImpl----");
	}

	@Override
	public void update()
	{
		
	}
	public void infoMethod()
	{
		System.out.println("---infoMethod---");
	}

}

package com.bjsxt.lc.spring.dao.impl;

import com.bjsxt.lc.spring.dao.IDao;

public class DaoOracleImpl implements IDao
{

	@Override
	public void cave()
	{
		System.out.println("----DaoOracleImpl----");
	}

	@Override
	public void update()
	{
		
	}

}

4:提供一个核心工具类实现对配置文件的读取和转化

package com.bjsxt.lc.spring.util;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

/**
 * 测试读取文件
 *  #~将属性文件的内容读取出来
	# ~将属性文件的内容放到容器中,提供一个方法通过key拿值
	#~如何根据字符串创建一个对象,将对象放到容器中;键为名字(属性中的名字,随便起的),值为对象
 * @author Administrator
 *
 */
public class ApplicationContext
{
	/* 拿出拿到的值,并且将数据存放到Map容器中  */
	private static Map<String,Object> contextMap = new HashMap<String,Object>();
	static{
		ResourceBundle bundle = ResourceBundle.getBundle("applicationContext");
		/* 获取一个 */
		String string = bundle.getString("dao");
	//	System.out.println(string);
		
		/* 获取多个 */
		Enumeration<String> keys = bundle.getKeys();
		/* 遍历 */
		while (keys.hasMoreElements())
		{
			String key = (String) keys.nextElement();
		//	System.out.println("key="+key+"---》"+bundle.getString(key));
			/* 将数据存放到Map容器里 */
			contextMap.put(key, bundle.getObject(key));
		}
	}
	/*
	 * 提供对外获得Map的方法
	 * */
	public static Map<String,Object> getContextMap()
	{
		return contextMap;
	}
	/*
	 * 对外提供直接获得一个值得方法
	 * */
	public static String getKey(String key)
	{
		return (String) contextMap.get(key);
	}
}

5:测试类

package com.bjsxt.lc.spring.test;

import java.util.Map;

import org.junit.Test;

import com.bjsxt.lc.spring.dao.IDao;
import com.bjsxt.lc.spring.util.ApplicationContext;
/**
 * 测试ApplincationContext
 * @author Administrator
 *
 */
public class TestApplicationContext
{
	@Test
	public void testApplicationContext() throws InstantiationException, IllegalAccessException, ClassNotFoundException
	{
		//测试一
		//new ApplicationContext();
		//测试二
		Map<String, Object> map = ApplicationContext.getContextMap();
//		for (Entry entry:map.entrySet())
//		{
//			System.out.println(entry.getKey()+"------->"+entry.getValue());
//		}
		//测试三
		String result = ApplicationContext.getKey("dao");
//		System.out.println(result);
		
		IDao dao = (IDao) Class.forName(result).newInstance();
		dao.cave();
		
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值