《暗黑破壞神2重製版》法師40級之前實用開荒心得
Spring的依賴注入
1.依賴注入:
IOC的作用:降低程式之間的耦合(依賴關係)
概念:依賴關係的管理交給spring維護,在當前類需要用到其他類的物件,由spring為我們提供,只需在配置檔案中說明關係的維護;
2.能夠注入的資料有三類:
-
基本型別和string
-
其他bean型別(在配置檔案中或者註解配置過的bean)
-
複雜集合型別
3.注入方式
1) 使用建構函式
<!-- 建構函式注入: 使用的標籤:constructor-arg 標籤出現的位置:bean標籤內部 標籤的屬性 type:用於指定要注入的資料的資料型別,該資料建構函式中某個或某些引數型別 index:用於指定要注入的資料給建構函式中指定索引位置的引數賦值,索引位置從0開始 name:用於指定給建構函式中指定名稱的引數賦值(常用) =================以上用於指定個給建構函式中那個引數賦值========== value:用於提供基本型別和string型別資料 ref:用於指定其他的bean型別資料,它指的就是在spring的Ioc核心容器中出現過的bean物件 優勢:在獲取bean物件時,注入資料是必須的操作,否則物件無法建立成功 弊端:改變了bean物件的例項化方式,使我們在建立物件時,如果融不到這些資料,頁必須提供 --> <bean id="accountService" class="com.li.service.impl.AccountServiceImpl"> <constructor-arg name="name" value="text"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> <constructor-arg name="birthday" ref="now"></constructor-arg> </bean> <!--配置一個日期物件--> <bean id="now" class="java.util.Date"></bean> public class AccountServiceImpl implements IAccountService { //如果經常變化的資料不適合的注入方式 private String name; private Integer age; private Date birthday; public AccountServiceImpl(String name,Integer age,Date birthday) { this.name=name; this.age=age; this.birthday=birthday; } public void saveAccount() { System.out.println("service中的saveAccount執行了******"); } }
2.set方法注入(常用)
<!--set方法注入 常用 涉及的標籤:property 出現的位置:bean標籤的內部 name:用於注入時所呼叫的set方法名稱 value:用於提供基本型別和string型別資料 ref:用於指定其他的bean型別資料,它指的就是在spring的Ioc核心容器中出現過的bean物件 優勢:建立物件時沒有明確的限制,可以直接使用預設建構函式 弊端:如果由某個成員,必須有值,則獲取物件時,有可能set方法沒有執行 --> <bean id="accountService2" class="com.li.service.impl.AccountServiceImpl2"> <property name="name" value="test"></property> <property name="age" value="18"></property> <property name="birthday" ref="now"></property> </bean> public class AccountServiceImpl2 implements IAccountService { private String name; private Integer age; private Date birthday; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public void setBirthday(Date birthday) { this.birthday = birthday; } public void saveAccount() { System.out.println("service中的saveAccount執行了******"); }
<!-- 複雜型別的注入/集合型別的注入 用於給List結構集合注入的標籤 list array set 用於給List結構集合注入的標籤 map props 結構相同,標籤可以互換 --> <bean id="accountService3" class="com.li.service.impl.AccountServiceImpl3"> <property name="myStrs"> <array> <value>aaa</value> <value>bbb</value> <value>ccc</value> </array> </property> <property name="myList"> <list> <value>AAA</value> <value>BBB</value> <value>CCC</value> </list> </property> <property name="mySet"> <set> <value>AAA</value> <value>BBB</value> <value>CCC</value> </set> </property> <property name="myMap"> <map> <entry key="testA" value="aaa"></entry> <entry key="testB" value="bbb"></entry> </map> </property> <property name="myProp"> <props> <prop key="testC">ccc</prop> <prop key="testD">ddd</prop> </props> </property> </bean> public class AccountServiceImpl3 implements IAccountService { private String[] myStrs; private List<String> myList; private Set<String> mySet; private Map<String,String> myMap; private Properties myProp; public void setMyStrs(String[] myStrs) { this.myStrs = myStrs; } public void setMyList(List<String> myList) { this.myList = myList; } public void setMySet(Set<String> mySet) { this.mySet = mySet; } public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; } public void setMyProp(Properties myProp) { this.myProp = myProp; } public void saveAccount() { System.out.println(Arrays.toString(myStrs)); System.out.println(myList); System.out.println(mySet); System.out.println(myMap); System.out.println(myProp); }
3.註解方式
- 用於建立物件:
作用和XML配置檔案的
1)@Component:
作用:用於當前類存入spring容器
屬性:value: 用於指定bean的id,當我們不寫時,預設為當前類的名稱且首字母小寫
2)@Controller : 用於表現層
3)@Service: 用於業務層
4)@Repository: 用於持久層
以上三個註解和Component功能一樣;
-
用於注入資料:
作用和XML配置檔案中的bean標籤中的
作用一樣;
1)@Autowried
作用:自動按型別注入,只要容器中由唯一的bean物件型別和要注入的變數型別匹配,就可以成功注入
出現位置:可以為成員變數,也可以為方法
2)@Qualifier:
作用:再按照類中注入的基礎之上再按照名稱注入,它在給類成員注入時不能單獨使用和Autowired配合使用,但是給方法注入時可以
屬性:value:用於指定注入bean的id
-
@Resources
作用:直接按照bean的id注入,它可以獨立使用
屬性:name:用於指定bean的id
以上三種注入只能注入其他bean型別的資料,而基本型別和String型別無法使用上述註解實現
-
@Value
作用:用於注入基本型別和String型別資料
屬性:value:用於指定資料的值,它可以使用spring中的spEL(也就是spring的el表示式)
SpEl的寫法:${表示式}
-
用於改變作用範圍
作用和在bean標籤中使用scopoe屬性實現的功能一樣的
@Scope
作用:用於指定bean的作用範圍
屬性:value:指定範圍取值。常用的值:singleton(單例) prototype(多例)
-
和生命週期相關
作用和在bean標籤中使用init_method和destroy-method的作用一樣
@PreDestroy:用於指定銷燬
@PostConstruct:用於指定初始化