实现一个自己的IOC
2024-08-26 12:41:38
实现一个自己的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);
}
}
最新文章
- centos下彻底删除 和重装MYSQL
- 迅雷9、迅雷极速版之迅雷P2P加速:流量吸血鬼?为什么你装了迅雷之后电脑会感觉很卡很卡?
- Spring浅探
- Android内存性能优化(内部资料总结)
- JAVA反射机制(转)
- [JAVA] java程序性能优化
- QGraphics
- Swift学习笔记十四
- nodejs + socket.io + redis 新手上路
- android 案例:从另一个activity选择信息并获取返回值
- phpcms 源码分析二:
- FLASH ROM与EEPROM的区别
- IQueryable 和 IEnumerable
- 如何用C#寻找100到999的所有水仙花数?
- java-数据库连接,分层实现增删改查测试
- js之制作网页计时器
- Sql Server语句大全
- JS调用本地设备
- python的异步IO模块
- 使用CefSharp跳转页面不弹出页面: