/**
?*?@author?l
?*1.實例化bean
?*2.保存bean
?*3.提供bean
?*
?*4.每個bean有一個唯一id
?*/
public?class?IoCContainer?{
???private?Map<String,Object>?beans?=?new?ConcurrentHashMap<String,Object>();
???
???public?Object?getBean(String?beanId)?{
??????return?beans.get(beanId);
???}
???
???/**
????*?委托IOC容器創建一個bean
????*?根據beanId獲取一個bean
????*?@author?l
????*clazz:首先告訴IoC你要實例化的bean來源于哪個類/要創建的bean的class
????*beanId:告訴IoC?bean的id是什么
????*paramBeanId:要創建的bean的class的構造方法所需要的參數的beanId們
????*/
???public?void?setBean(Class<?>?clazz,String?beanId,String...?paramBeanIds)?{
??????//組裝構造方法所需的參數值
??????Object[]?paramValues?=?new?Object[paramBeanIds.length];
??????for(int?i=0;i<paramBeanIds.length;i++)?{
?????????paramValues[i]=beans.get(paramBeanIds[i]);
??????}
??????//調用構造方法實例化bean
??????Object?bean?=?null;
??????for(Constructor<?>constructor:clazz.getConstructors())?{
?????????try?{
????????????bean?=?constructor.newInstance(paramValues);
?????????}catch(InstantiationException?e){
??????????}catch(IllegalAccessException?e)?{
??????????}catch(InvocationTargetException?e)?{
??????????}
??????}
??????if(bean==null)?{
?????????throw?new?RuntimeException("找不到合適的構造方法實例化bean");
??????}
??????//將實例化的bean放入beans
??????beans.put(beanId,?bean);
???}
}

2021-05-15
在test中創建IoCTest.java
2019-11-02
兄弟你的main方法沒有啊? ?看你那個命名應該是測試類? 但是你測試類的注解也沒有寫