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);
        }
    }
    

      




  • 相关阅读:
    JSP标准标签库(JSTL)--JSTL简介与安装
    JSP标签编程--简单标签
    Tomcat数据源
    Linux 更新vim
    perl 函数
    js 使用a标签 下载资源
    js arrayBuffer 字节序问题,小端法,大端法
    js 的 ArrayBuffer 和 dataView
    ajax 获取服务器返回的XML字符串
    遍历form表单里面的表单元素,取其value
  • 原文地址:https://www.cnblogs.com/wangcp-2014/p/11329382.html
Copyright © 2011-2022 走看看