//中国人 package test; public class Chinese implements Person { public void sayBye() { System.out.println("再见"); } public void sayHello() { System.out.println("你好"); } } //美国人 package test; public class American implements Person { public void sayBye() { System.out.println("Bye"); } public void sayHello() { System.out.println("hello"); } }
public void doIt(){ /*获取bean映射配置文件,配置文件放于与当前测试类在同一个目录下*/ ApplicationContext ctx=new FileSystemXmlApplicationContext(getClass().getResource("bean.xml").toString()); Person person=null; person=(Person)ctx.getBean("chinese"); person.sayHello(); person.sayBye(); person=(Person)ctx.getBean("american"); person.sayHello(); person.sayBye(); }
###5. 对以上示例调用的说明: A. 对接口Person和具体实现类Chinese、American就没有什么需要说明的了,和其它的编程方式,都是先定义接口,实现类再通过继承接口实现其方法。 B. 映射类中将类的路径定义为一个id的名称,到时系统根据传到的id名称,到配置文件中去找到该类的绝对路径,再通过反射原理加载该类,并返回其对象,这个是通过getBean这个动作完成的。 C. 根据里氏代换原则,能够接收父类的地方,都可以接收子类,所以这个时候通过getBean返回的对象(如Chinese或者American),都可以赋给接口Person,这个时候接口类调用其中的方法的时候,因为这个时候父类实际上接受的是子类的对象,因而这个时候调用的就是指定子类的方法。这个时候Spring就帮我们完成了如下工作:
Person person=new Chinese();
只是子类不是通过显示给出来的,而是通过Spring工厂通过映射配置生成的。
##示例二、设值注入
设值注入是依赖注入的一种,依赖注入早期叫控制反转(IOC),也可以称反射,他们的意义都相同。当某个 Java 实例(调用者)需要另一个Java 实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,通常由 Spring 容器来完成,然后注入调用者,因此称为控制反转,也称为依赖注入。 ###1. 建立接口:人与斧头
1 2 3 4 5 6 7 8 9 10
//人,定义一个动作: package test2; public interface Person { public void useAxe(); } //斧头,定义一个动作: package test2; public interface Axe { public void chop(); }