Spring IoC 瀹瑰櫒鍜屼笂涓嬫枃鐨勫垵濮嬪寲鍖呮嫭Bean瀹氫箟淇℃伅鐨勮祫婧愬畾浣嶏紝杞藉叆鍜屾敞鍐岃繃紼嬶紝榪欓噷閲囩敤浜嗙‖緙栫爜蹇界暐鎺夊畾涔変俊鎭殑璧勬簮瀹氫綅榪欎竴鐜妭銆?br />
DefaultSingletonBeanRegistry
---AbstractBeanFactory
---AbstractAutowireCapableBeanFactory
---DefaultListableBeanFactory
---XmlBeanFactory
XmlBeanFactory鎶奃efaultListableBeanFactory浣滀負ioc瀹瑰櫒鐨勫疄鐜?br />
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory)
throws BeansException
{
super(parentBeanFactory);
reader = new XmlBeanDefinitionReader(this);
reader.loadBeanDefinitions(resource);
}
涓嬮潰鍏堜粙緇嶄笅鍑犱釜姒傚康錛?br />
BeanDefinition Bean瀹氫箟淇℃伅
BeanFactory Bean宸ュ巶
BeanDefinitionRegistry 娉ㄥ唽鍣ㄧ殑鎺ュ彛
MutablePropertyValues 灞炴ч泦鍚堢被
RootBeanDefinition BeanDefinition鐨勫疄鐜?br />

public class DaoA implements IDaoA
{

private String param;

public void operationA()
{
System.out.println("DaoA.operationA(" + param + ")");
}


public String getParam()
{
return param;
}


public void setParam(String param)
{
this.param = param;
}
}


public class DaoB implements IDaoB
{


public void operationB()
{
System.out.println("DaoB.operationB()");
}
}

public class Service implements IService
{

private IDaoA daoA = null;
private IDaoB daoB = null;

public void service()
{
System.out.println("********service begin ***********");
daoA.operationA();
daoB.operationB();
System.out.println("********service end *************");
}


public IDaoA getDaoA()
{
return daoA;
}


public void setDaoA(IDaoA daoA)
{
this.daoA = daoA;
}


public IDaoB getDaoB()
{
return daoB;
}


public void setDaoB(IDaoB daoB)
{
this.daoB = daoB;
}
}

import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;


public class HardCodeIoc
{


public static void main(String[] args)
{
// 娉ㄥ唽鍣?/span>
BeanDefinitionRegistry register = new DefaultListableBeanFactory();

/**//* DaoA鐨勫睘鎬ч泦(DaoB娌℃湁灞炴ц繖閲屽氨涓嶅仛琛ㄧず) */
MutablePropertyValues daoAProperties = new MutablePropertyValues();
daoAProperties.addPropertyValue("param", "param1");

/**//* Service鐨勫睘鎬ч泦 */
MutablePropertyValues serviceProperties = new MutablePropertyValues();
serviceProperties.addPropertyValue("daoA", new RuntimeBeanReference("daoA"));
serviceProperties.addPropertyValue("daoB", new RuntimeBeanReference("daoB"));

/**//* 鍒嗗埆鏋勯燚aoA,DaoB,Service鐨凚ean瀹氫箟淇℃伅 */
RootBeanDefinition daoADefinition = new RootBeanDefinition(DaoA.class, daoAProperties);
RootBeanDefinition daoBDefinition = new RootBeanDefinition(DaoB.class, null);
RootBeanDefinition serviceDefinition = new RootBeanDefinition(Service.class, serviceProperties);

/**//* 鎶奃aoA,DaoB,Service娉ㄥ唽鍒板伐鍘?nbsp;*/
register.registerBeanDefinition("daoA", daoADefinition);
register.registerBeanDefinition("daoB", daoBDefinition);
register.registerBeanDefinition("service", serviceDefinition);
// 杞寲涓築ean宸ュ巶瀹瑰櫒
BeanFactory beanFactory = (BeanFactory) register;
IDaoA daoA = (IDaoA) beanFactory.getBean("daoA");
IDaoB daoB = (IDaoB) beanFactory.getBean("daoB");
IService service = (IService) beanFactory.getBean("service");
daoA.operationA();
daoB.operationB();
service.service();
}
}
鎵撳嵃緇撴灉濡備笅錛?br />
DaoA.operationA(param1)
DaoB.operationB()
********service begin ***********
DaoA.operationA(param1)
DaoB.operationB()
********service end *************
浜嗚В浜嗚繖鍑犱釜姒傚康鍚庡氨鍙互鍒╃敤BeanFactory鐨勫悗閰嶇疆澶勭悊閰嶅悎annotation榪涜鑷姩娉ㄥ叆浜嗭紝鐪佸嵈浜唜ml閰嶇疆鐨勯夯鐑︺?br />

]]>