轉自 https://blog.csdn.net/coding_1994/article/details/80634810,這位做者寫的很清晰。java
//定義Person接口 public interface Person{ //Person接口裏定義一個使用斧子的方法 public void useAxe(); }
//定義Axe接口 public interface Axe{ //Axe接口裏有個砍的方法 public void chop(); }
public class Chinese implements Person{ //面向Axe接口編程,而不是具體的實現類 private Axe axe; //默認的構造器 public Chinese(){ } //設值注入所需的setter方法 public void setAxe(Axe axe){ this.axe = axe; } //實現Person接口的useAxe方法 public void useAxe(){ System.out.println(axe.chop()); } }
//Axe的第一個實現類 StoneAxe public class StoneAxe implements Axe{ //默認構造器 public StoneAxe(){ } //實現Axe接口的chop方法 public String chop(){ return "石斧砍柴好慢"; } }
<!-- 下面是標準的XML文件頭 --> <?xml version="1.0" encoding="gb2312"?> <!-- 下面一行定義Spring的XML配置文件的dtd --> "http://www.springframework.org/dtd/spring-beans.dtd"> <!-- 以上三行對全部的Spring配置文件都是相同的 --> <!-- Spring配置文件的根元素 --> <BEANS> <!—定義第一bean,該bean的id是chinese, class指定該bean實例的實現類 --> <BEAN class="lee".Chinese id=chinese> <!-- property元素用來指定須要容器注入的屬性,axe屬性須要容器注入此處是設值注入,所以Chinese類必須擁有setAxe方法 --> |
<property name="axe"> <!-- 此處將另外一個bean的引用注入給chinese bean --> <REF local="」stoneAxe」/"> </property> </BEAN> <!-- 定義stoneAxe bean --> <BEAN class="lee".StoneAxe id=stoneAxe /> </BEANS> |
public class BeanTest{ //主方法,程序的入口 public static void main(String[] args)throws Exception{ //由於是獨立的應用程序,顯式地實例化Spring的上下文。 ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //經過Person bean的id來獲取bean實例,面向接口編程,所以 //此處強制類型轉換爲接口類型 Person p = (Person)ctx.getBean("chinese"); //直接執行Person的userAxe()方法。 p.useAxe(); } }
<?xml version="1.0"?> <!-- 定義編譯該項目的基本信息--> <PROJECT name="spring" default="." basedir="."> <!-- 定義編譯和運行該項目時所需的庫文件 --> <PATH id=classpath> <!-- 該路徑下存放spring.jar和其餘第三方類庫 --> <FILESET dir=../../lib> <INCLUDE name="*.jar" /> </FILESET> <!-- 同時還須要引用已經編譯過的class文件--> <PATHELEMENT path="." /> </PATH> <!-- 編譯所有的java文件--> <TARGET description="Compile all source code" name="compile"> <!-- 指定編譯後的class文件的存放位置 --> <JAVAC debug="true" destdir="."> deprecation="false" optimize="false" failοnerrοr="true"> <!-- 指定須要編譯的源文件的存放位置 --> <SRC path="." /> <!-- 指定編譯這些java文件須要的類庫位置--> <CLASSPATH refid="classpath" /> </JAVAC> </TARGET> <!-- 運行特定的主程序 --> <TARGET description="run the main class" name="run" depends="compile"> <!-- 指定運行的主程序:lee.BeanTest。--> <JAVA failοnerrοr="true" fork="yes" classname="lee.BeanTest"> <!-- 指定運行這些java文件須要的類庫位置--> <CLASSPATH refid="classpath" /> </JAVA> </TARGET> </PROJECT> |
//Axe的另外一個實現類 SteelAxe public class SteelAxe implements Axe { //默認構造器 public SteelAxe() {} //實現Axe接口的chop方法 public String chop() { return "鋼斧砍柴真快"; } } |
<!-- 定義一個steelAxe bean--> <BEAN class="lee".SteelAxe id=steelAxe /> |
<REF local="」stoneAxe」/"> |
<REF local="」steelAxe」/"> |
//Chinese實現Person接口 public class Chinese implements Person { //面向Axe接口編程,而不是具體的實現類 private Axe axe; //默認的構造器 public Chinese() {} //構造注入所需的帶參數的構造器 public Chinse(Axe axe) { this.axe = axe; } //實現Person接口的useAxe方法 public void useAxe() { System.out.println(axe.chop()); } } |
<!-- 下面是標準的XML文件頭 --> <xml version="1.0" encoding="gb2312"?> <!-- 下面一行定義Spring的XML配置文件的dtd --> "http://www.springframework.org/dtd/spring-beans.dtd"> <!-- 以上三行對全部的Spring配置文件都是相同的 --> <!-- Spring配置文件的根元素 --> <BEANS> <!—定義第一個bean,該bean的id是chinese, class指定該bean實例的實現類 --> <BEAN class="lee".Chinese id=chinese> </BEAN> <!-- 定義stoneAxe bean --> <BEAN class="lee".SteelAxe id=steelAxe /> </BEANS> |