zoukankan      html  css  js  c++  java
  • 实现一个自己的IOC

    实现一个自己的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);
        }
    }
    

      




  • 相关阅读:
    10.30 afternoon
    10.29 afternoon
    10.29 morning

    10.27 noip模拟试题
    codevs 3052 多米诺 二分图匹配
    poj 1849 Two
    10.26 noip模拟试题
    10.25 noip模拟试题
    .NET Core EF 版本问题
  • 原文地址:https://www.cnblogs.com/wangcp-2014/p/11329382.html
Copyright © 2011-2022 走看看