在传统的模式之中,对象的创建和类与类之间的关系表示是通过new对象创建。
在spring中对象的创建以及他们之间的依赖关系,通过spring容器来管理。
准备条件:
磁盘接口
public interface Disk {
	public void read();
	public void write(String data);
	
}public class UsbDisk implements Disk {
	@Override
	public void read() {
		// TODO Auto-generated method stub
		System.out.println("U盘开始读取数据...");
	}
	@Override
	public void write(String data) {
		// TODO Auto-generated method stub
		System.out.println("U盘开始写入数据"+data);
	}
}移动硬盘类
public class MoveDisk implements Disk {
    
    @Override
    public void read() {
        // TODO Auto-generated method stub
        System.out.println("硬盘开始读取数据...");
    }
    @Override
    public void write(String data) {
        // TODO Auto-generated method stub
        System.out.println("硬盘开始写入数据"+data);
    }import junit.framework.TestCase;
public class Test extends TestCase{
	public void testRead(){
		Disk disk = new MoveDisk();
		disk.read();
	}
	
	public void testWrite(){
		Disk disk=new MoveDisk();
		disk.write("hello");
	}
}1.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
	http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean name="disk" class="com.qzp.MoveDisk"></bean>
    	
</beans>import junit.framework.TestCase;
public class Test extends TestCase{
	public void testRead(){
		ApplicationContext cxt=new ClassPathXmlApplicationContext("config/applicationContext.xml");
		//Disk disk = new MoveDisk();
		Disk disk=(Disk)cxt.getBean("disk");
		disk.read();
	}
	
	public void testWrite(){
		Disk disk=new MoveDisk();
		disk.write("hello");
	}
}spring的实质,先加载applicationContext.xml文件,然后通过jdom对xml文件中的bean进行解析,解析以后获取其对应的类名,通过类加载机制获取其类所对应的方法。这样的话,修改实例化对象只需在spring容器中修改就可以了。
下面模拟的是一个beanFactory实例化的方法
public class BeanFactory {
	//获取一个bean实例的静态方法
	public static Object getBean(String beanName){
		try {
			//运用反射机制
			return Class.forName(beanName).newInstance();
		} catch (Exception ex) {
			// TODO: handle exception
			ex.printStackTrace();
			return null;			
		}	
	}
}public class TestBeanFactory extends TestCase{
	public void testBean(){
		Disk disk=(Disk)BeanFactory.getBean("com.qzp.dao.impl.MoveDisk");
		disk.read();
		disk.write("hello");
	}
}
原文地址:http://blog.csdn.net/qzp1991/article/details/43868355