Spring 依赖查找

Spring 依赖查找

Java中的依赖查找

单一类型的依赖查找
JNDI - javax.naming.Context # lookup方法
JavaBeans java.beans.beancontext.BeanContext
集合类型的依赖查找
JavaBeans java.beans.beancontext.BeanContext

类BeanContextServices # getCurrentServiceSelectors (Class serviceClass) 得到一个可迭代对象。

Spring中的依赖查找也借鉴于这里。

层次类型的依赖查找
JavaBeans java.beans.beancontext.BeanContext

Spring中的依赖查找

单一类型依赖查找接口- BeanFactory
  • 根据Bean名称查找

    • getBean(String name)

      User user = (User) beanFactory.getBean("user");
      System.out.println("实时查找:" + user);
      
    • Spring 2.5 覆盖默认参数:getBean(String,Object...)

      使用显示的参数创建Bean的实例(仅在创建新实例时使用,而不是检索现有实例时使用)

  • 根据 Bean类型查找

    • Bean实时查找

      • Spring 3.0 getBean(Class)

          User user = beanFactory.getBean(User.class);
        
      • Spring 4.1 覆盖默认参数:getBean(Class,Object...)

    • Spring 5.1 Bean 延迟查找

      • getBeanProvider(Class)

         @Bean
            @Primary
            public String helloWorld() { // 方法名就是 Bean 名称 = "helloWorld"
                return "Hello,World";
            }
        
            private static void lookupByObjectProvider(AnnotationConfigApplicationContext applicationContext) {
                ObjectProvider objectProvider = applicationContext.getBeanProvider(String.class);
                System.out.println(objectProvider.getObject());
            }
        
        输出 : Hello,World
        

        ObjectProvider : 返回指定Bean, 并且允许懒加载。当调用getObject()才会返回真正的实例。继承与ObjectFactory。

         ObjectProvider extends ObjectFactory, Iterable
        
* getBeanProvider(ResolvableType)
  • 根据名称加类型查找 getBean(String,Class)

    User user = beanFactory.getBean("user", User.class);
    
集合类型依赖查找接口 - ListableBeanFactory
  • 根据Bean类型查找

    • 获取同类型Bean名称列表

      • genBeanNamesForType(Class)
      • Spring 4.2 getBeanNamesForType(ResolvableType)
    • 获取相同类型

      • getBeansOfType(Class) 以及重载方法

你可能感兴趣的:(Spring 依赖查找)