標籤:
今天接觸了Spring的初步用法, 感覺跟執行個體化實體類沒啥區別, 像這種簡單的代碼還不如直接執行個體化來的方便, 這樣使用Spring的話總共需要三個檔案
第一個當然是一個實體類了, 定義好屬性, getter和setter方法, 別忘了構造一個無參的構造方法.
public class HelloWorld { private String mingzi; private String dizhi; private User user; public void sayHello() { System.out.println("Hello "+mingzi+user); } //屬性mingzi的set和get方法 public void setMingzi(String mingzi) { System.out.println("設定mingzi = "+mingzi); this.mingzi = mingzi; } public String getMingzi() { return mingzi; } //再定義一個屬性 public String getDizhi() { return dizhi; } public void setDizhi(String dizhi) { System.out.println("設定dizhi = "+dizhi); this.dizhi = dizhi; } //定義屬性user的get和set方法 public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
再一個就是一個main方法的入口, 來調用寫好的實體類.
import org.springframework.context.ApplicationContext;//第1行的引用import org.springframework.context.support.ClassPathXmlApplicationContext;//第1行的引用public class Main { public static void main(String[] args) { //通過Spring的方式調用方法 //構建容器 構建容器的時候就調用了set方法 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//第1行 //從容器中擷取javaBean的執行個體 控制反轉IOC HelloWorld hw1 = (HelloWorld)ac.getBean("hw"); hw1.sayHello(); }}
剩下的一個也是最重要的一個檔案, 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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 將一個類的定義放在這邊 --> <bean id="hw" class="com.hanqi.HelloWorld"> <!-- 這裡實現的依賴注入(DI) --> <property name="dizhi" value="山東淄博"></property> <property name="mingzi" value="小強"></property> <property name="user" ref="user1"></property> </bean> <bean id="user1" class="com.hanqi.User"> <!-- 構造器注入, 如果資料類型是唯一的, 順序可以無所謂 --> <!-- 可以添加type或者index="序號"來匹配順序號 --> <constructor-arg value="12" index="2"></constructor-arg> <constructor-arg value="漢族" index="3"></constructor-arg> <constructor-arg value="小明" index="0"></constructor-arg> <constructor-arg value="男" index="1"></constructor-arg> </bean></beans>
定義一個User類
public class User { private String age; private String sex; private String minz; private String name; public User() {} public User(String name, String sex, String age, String minz) { super(); this.name = name; this.age = age; this.sex = sex; this.minz = minz; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getMinz() { return minz; } public void setMinz(String minz) { this.minz = minz; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", sex=" + sex + ", minz=" + minz + "]"; }}
這裡主要說明以下幾點:
一, <property>屬性標籤的設定, name=""的值, 必須為set方法後面的方法名, 一個字母也不能錯, 但是不包括大小寫, 也就是說, 方法名可以有大寫字母, 到了name=""屬性裡面, 就無所謂了, 只要你字母寫對了就OK
二, 當使用構造器進行屬性注入的時候
<constructor-arg value="12" index="2"></constructor-arg> <constructor-arg value="漢族" index="3"></constructor-arg> <constructor-arg value="小明" index="0"></constructor-arg> <constructor-arg value="男" index="1"></constructor-arg>
當然可以像上面一樣定義一個index="", 但是注意, 序號是從0開始的, 第一個屬性的序號是0
如果沒有index, 構造器自己也能識別每個屬性的賦值, 但是這裡要保持與構造方法的順序一致, 即帶著參數的那個構造方法
public User(String name, String sex, String age, String minz) { super(); this.name = name; this.age = age; this.sex = sex; this.minz = minz; }
這裡這個構造方法的參數的順序是name, sex, age, minz(為了方便測試, 我都設定成了String類型的), 所以構造器的順序也應當這樣寫
<constructor-arg value="小明"></constructor-arg> → String name<constructor-arg value="男"></constructor-arg> → String sex<constructor-arg value="12"></constructor-arg> → String age<constructor-arg value="漢族"></constructor-arg> → String minz
Spring簡單獲得實體類的執行個體, 使用ApplicationContext()方法的幾點注意事項