1. 程式人生 > 其它 >spring學習11:註解實現自動裝配

spring學習11:註解實現自動裝配

spring學習11:註解實現自動裝配

  • 註解實現自動裝配:

    • JDK1.5支援的註解;

    • Spring從2.5開始就支援註解;

       

  • 要使用註解須知:

    • 1,匯入約束;

       xmlns:context="http://www.springframework.org/schema/context"
    • 2,配置註解的支援【重要】

       <context:annotation-config/>
    • 3,樣例:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
             https://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             https://www.springframework.org/schema/context/spring-context.xsd">

         <context:annotation-config/>

      </beans>

 

  • 使用註解:@Autowired

    • 直接在屬性上使用即可,也可以在set方法上使用;

    • 使用@Autowired我們可以不用編寫Set方法了,前提是你這個自動裝配的屬性在IOC(Spring)容器中存在且符合我們的名字規則(ByType);

    • 科普:

      @Nullable  欄位標記了這個註解,說明這個欄位可以為null;
      public @interface Autowired {
         boolean required() default true;
      }

       

    • 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"
            xmlns:context="http://www.springframework.org/schema/context"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
             https://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             https://www.springframework.org/schema/context/spring-context.xsd">

         <!--開啟註解支援-->
         <context:annotation-config/>


         <bean id="cat" class="com.ljxdemo.pojo.Cat"/>

         <bean id="dog" class="com.ljxdemo.pojo.Dog"/>

         <bean id="person" class="com.ljxdemo.pojo.Person">
             <property name="name" value="張三"/>
         </bean>


      </beans>
    • pojo類添加註解: @Autowired


      public class Person {

         //如果顯式的定義了Autowired的屬性為false,說明這個物件可以為null,否則不能為空
         @Autowired
         @Qualifier(value = "cat11")
         private Cat cat;
         @Autowired
         @Qualifier(value = "dog33")
         private Dog dog;

         private String name;
      }
    • 如果@Autowired自動裝配的環境比較複雜,當自動裝配無法通過一個註解【@Autowired】

      完成的時候,我們可以使用@Qualifier(value = "dog33")去配合@Autowired的使用,指定一個唯一的bean物件注入;

       

       

    • @Resource註解:

      • @Resource也可以加引數:@Resource(name="cat11")

      public class Person {

         @Resource
         private Cat cat;
         @Resource(name="dog22")
         private Dog dog;
         
      }

       

  • 總結:

    • @Resource@Autowired的區別:

      • 相同點:都是用來自動裝配的,都可以放在屬性欄位上;

      • 不同點:

        • @Autowired通過ByType的方式實現,而且必須要求這個物件存在;【常用】

        • @Resouce預設通過ByName的方式實現,如果找不到名字,則通過ByType實現;如果2個都找不到就報錯;

        • 執行順序不同:@Resouce是通過ByType的方式實現,@Resouce預設通過ByName的方式實現