- 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);
- }
- }
来源: http://www.bubuko.com/infodetail-3149864.html