首页 > 其他 > 详细

实现一个自己的IOC

时间:2019-08-09 21:52:05      阅读:157      评论:0      收藏:0      [点我收藏+]
实现一个自己的IOC
package com.IocExample;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/***
 * @description: IoC容器例子
 * @author: 
 * @create: 2019-08-09 15:40
 *
 * 1、实例化bean
 * 2、保存bean
 * 3、提供bean
 * 4、每一个ben要产生一个唯一的id与之相呼应
 **/
public class IoCContainer {

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

    /**
     * 根据beanId获取一个bean
     * @param beanId
     * @return 返回Bean
     */
    public Object getBean(String beanId){
        return beans.get(beanId);
    }

    /**
     * 委托IoC容器创建一个Bean
     * @param clazz 要创建的bean的class
     * @param beanId beanId
     * @param paramBeanId 要创建的bean的class的构造方法所需要的参数的beanId们(依赖的beanId)
     */
    public void setBean(Class<?> clazz, String beanId,String... paramBeanId){

        //1\组装构造方法所需要的参数值--获取依赖bean
        Object[] paramValues = new Object[paramBeanId.length] ;
        for (int i = 0; i < paramBeanId.length; i++){
            paramValues[i] = beans.get(paramBeanId[i]);
            System.out.println("paramValues["+ i + "] =" + paramValues[i]);
        }
        //2、调用构造方法实例化bean
        Object bean = null;
        //获取所有构造函数
        for (Constructor<?> constructor : clazz.getConstructors()) {
            try{
                bean = constructor.newInstance(paramValues);
            } catch (IllegalAccessException e) {
            } catch (InstantiationException e) {
            } catch (InvocationTargetException e) {
            }
            if (bean == null){
                throw new RuntimeException("找不到合适的构造方法");
            }
        }
        //3、将实例化的bean放入beans
        beans.put(beanId, bean);
    }
}

  




实现一个自己的IOC

原文:https://www.cnblogs.com/wangcp-2014/p/11329382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!