在传统的模式之中,对象的创建和类与类之间的关系表示是通过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"); } }