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