天天看點

Spring-IoC:依賴查找和依賴注入

IoC 依賴查找

  • 根據Bean名稱查找
    • 實時查找
    • 延遲查找
  • 根據Bean類型查找
    • 單個Bean對象
    • 集合Bean對象
  • 根據Bean名稱 + 類型查找
  • 根據Java注解查找
    • 單個Bean對象
    • 集合Bean對象
private static void lookupByAnnotation(BeanFactory beanFactory) {
        if (beanFactory instanceof ListableBeanFactory) {
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map<String, User> users = (Map) listableBeanFactory.getBeansWithAnnotation(Super.class);
            System.out.println("查找到的所有@Super的User集合對象:" + users);
        }
    }

    private static void lookupByCollection(BeanFactory beanFactory) {
        if (beanFactory instanceof ListableBeanFactory) {
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
            System.out.println("查找到的所有User集合對象:" + users);
        }
    }

    private static void lookupByType(BeanFactory beanFactory) {
        User user = beanFactory.getBean(User.class);
        System.out.println("實時查找:" + user);
    }

    private static void lookupInLazy(BeanFactory beanFactory) {
        ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
        User user = objectFactory.getObject();
        System.out.println("延遲查找:" + user);
    }

    private static void lookupInRealTime(BeanFactory factory) {
        User user = (User) factory.getBean("user");
        System.out.println("實時查找:" + user);
    }
           

IoC 依賴注入

  • 根據Bean名稱注入
  • 根據Bean類型注入
    • 單個Bean對象
    • 集合Bean對象
  • 注入容器内建Bean對象
  • 注入非Bean對象
  • 注入類型
    • 實時注入
    • 延時注入
<bean id="userRepository" 
          class=" org.example.ioc.overview.repositary.UserRepository" 
          autowire="byType">
        <!-- 開啟 Auto-Wring 自動注入 -->
        
        <!-- 寫死、手動配置 -->
<!--        <property name="users">-->
<!--            <util:list>-->
<!--                <ref bean="user"/>-->
<!--                <ref bean="superUser" />-->
<!--            </util:list>-->
<!--        </property>-->
    </bean>
           

IoC 依賴來源

  • 自定義Bean
  • 容器内建Bean對象
  • 容器内建依賴

IoC 配置元資訊

  • Bean 定義配置
    • 基于 XML 檔案
    • 基于 Properties 檔案
    • 基于 Java 注解
    • 基于 Java API
  • IoC 容器配置
    • 基于 XML 檔案
    • 基于 Java 注解
    • 基于 Java API
  • 外部化屬性配置
    • 基于 Java 注解