实现一个自己的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的更多相关文章

  1. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  2. 仿写一个简陋的 IOC/AOP 框架 mini-spring

    讲道理,感觉自己有点菜.Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring ...

  3. 手写一个简易的IOC

    这个小项目是我读过一点Spring的源码后,模仿Spring的IOC写的一个简易的IOC,当然Spring的在天上,我写的在马里亚纳海沟,哈哈 感兴趣的小伙伴可以去我的github拉取代码看着玩 地址 ...

  4. 【Android开发经验】来,咱们自己写一个Android的IOC框架!

    到眼下位置.afinal开发框架也是用了好几个月了,还记得第一次使用凝视完毕控件的初始化和事件绑定的时候,当时的心情是多么的兴奋- -代码居然能够这样写!然后随着不断的学习,也慢慢的对IOC框架和注解 ...

  5. 2.自己搭建的一个简易的ioc容器

    1.persondao类namespace MyselfIoC{    public class PersonDao    {        public override string ToStri ...

  6. Spring AOP的一个比喻和IOC的作用

    aop切面编程就是在常规的执行java类中方法前或执行后加入自定义的方法.比如你本来每天都去打酱油,去,打酱油,回.现在我每天在你打酱油路上等着,你去打酱油的时候我打你一顿,回来的时候给你点糖果吃.你 ...

  7. Spring入门之一-------实现一个简单的IoC

    一.场景模拟 public interface Human { public void goHome(); } Human:人类,下班了该回家啦 public interface Car { void ...

  8. .NET实现一个简单的IOC容器

    目录 1.主要细节 2.具体示例 参考及示例代码下载 shanzm-2020年3月17日 20:06:01 1.主要细节 使用反射程序集的方式获取对象的类型 通过反射的方式获取指定类型的的所有公共属性 ...

  9. 自己动手实现一个简单的 IOC容器

    控制反转,即Inversion of Control(IoC),是面向对象中的一种设计原则,可以用有效降低架构代码的耦合度,从对象调用者角度又叫做依赖注入,即Dependency Injection( ...

随机推荐

  1. Android笔记(六十九) 仿微信界面(一)

          综合之前的Fragment和自定义组件的知识,实现微信界面 MainActivity.java package cn.lixyz.test; import android.app.Acti ...

  2. 网卡启动安装dell服务器OS

    参照视频 需要将boot改成bois启动 https://www.dell.com/support/contents/cn/zh/cndhs1/videos/videoPlayer/k1ajZzdjo ...

  3. StringComparison 枚举

    地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.stringcomparison?redirectedfrom=MSDN&view= ...

  4. 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数

    遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...

  5. linux 查看目录的剩余空间大小

    两个命令df .du结合比较直观 df    -h                     查看整台服务器的硬盘使用情况 cd    /                       进入根目录 du ...

  6. oracle 查询月份

    ①:select substr(to_char(sysdate,'yyyy-mm-dd'),6,2) from dual; ②:select to_char(sysdate,'MM') from du ...

  7. Dubbo源码分析(5):ExtensionLoader

    背景 Dubbo所有的模块加载是基于SPI机制的.在接口名的上一行加个@SPI注解表明要此模块要通过ExtensionLoader加载.基于SPI机制的扩展性比较好,在不修改原有代码,可以实现新模块的 ...

  8. php 程序执行时间检测

    我们有的时经常需要做程序的执行时间执行效率判断.大理石平台检定规程 实现的思路如下: <?php //记录开始时间 //记录结整时 // 开始时间  减去(-)  结束时间  得到程序的运行时间 ...

  9. leetcode解题报告(25):Reverse Words in a String III

    描述 Given a string, you need to reverse the order of characters in each word within a sentence while ...

  10. Cogs 1708. 斐波那契平方和(矩阵乘法)

    斐波那契平方和 ★★☆ 输入文件:fibsqr.in 输出文件:fibsqr.out 简单对比 时间限制:0.5 s 内存限制:128 MB [题目描述] ,对 1000000007 取模.F0=0, ...