1. 程式人生 > 遊戲攻略 >《暗黑破壞神2重製版》法師40級之前實用開荒心得

《暗黑破壞神2重製版》法師40級之前實用開荒心得

Spring的依賴注入

1.依賴注入:

IOC的作用:降低程式之間的耦合(依賴關係)

概念:依賴關係的管理交給spring維護,在當前類需要用到其他類的物件,由spring為我們提供,只需在配置檔案中說明關係的維護;

2.能夠注入的資料有三類:

  1. 基本型別和string

  2. 其他bean型別(在配置檔案中或者註解配置過的bean)

  3. 複雜集合型別

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

  1. @Resources

    作用:直接按照bean的id注入,它可以獨立使用

    屬性:name:用於指定bean的id

以上三種注入只能注入其他bean型別的資料,而基本型別和String型別無法使用上述註解實現

  1. @Value

    作用:用於注入基本型別和String型別資料

    屬性:value:用於指定資料的值,它可以使用spring中的spEL(也就是spring的el表示式)

    SpEl的寫法:${表示式}

  • 用於改變作用範圍

    作用和在bean標籤中使用scopoe屬性實現的功能一樣的

    @Scope

    作用:用於指定bean的作用範圍

    屬性:value:指定範圍取值。常用的值:singleton(單例) prototype(多例)

  • 和生命週期相關

    作用和在bean標籤中使用init_method和destroy-method的作用一樣

    @PreDestroy:用於指定銷燬

    @PostConstruct:用於指定初始化

我有一壺酒 足以慰風塵 盡傾江海里 贈飲天下人