Spring获取对象的几种方式?

1、通过 name 获取对象

2、通过 factoryBean 获取对象

3、通过类型获取对象

4、通过类型获取对象集合

5、通过指定注解获取对象

6、通过 BeanProvider 获得对象




       
           
           
       

       /* 当希望从容器中获取到一个bean对象的时候,容器中却找到了多个匹配的bean,此时spring不知道 
        * 如何选择了,处于懵逼状态,就会报异常。
        * spring中可以通过bean元素的primary属性来解决这个问题,可以通过这个属性来指定当前bean为 
        * 主要候选者,当容器查询一个bean的时候,如果容器中有多个候选者匹配的时候,此时spring会返 
        * 回主要的候选者
        */
       
           
       

       
           
       
public class TestSpringUtil {
    public static void main(String[] args) {
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("META-INF/spring-bean.xml");
        // 通过名称获取对象
        getBeanByName(beanFactory);
        // 延迟获取对象
        getBeanByObjectFactory(beanFactory);
        // 通过类型获取对象
        getBeansByType(beanFactory);
        // 通过类型获取对象集合
        getCollectionBeansByType(beanFactory);
        // 通过指定注解获取对象
        getBeansByAnnoation(beanFactory);
    }
    /**
     * 通过名称获取对象
      */
    private static void getBeanByName(BeanFactory beanFactory) {
        User user = (User) beanFactory.getBean("user");
        System.out.println("通过名称获取对象:" + user);
    }
    /**
     * 延迟获取对象
      */
    private static void getBeanByObjectFactory(BeanFactory beanFactory) {
        ObjectFactory objectFactory = (ObjectFactory) beanFactory.getBean("objectFactory");
        User user = objectFactory.getObject();
        System.out.println("延迟获取对象:" + user);
    }
    /**
     * 通过类型获取对象
      */
    private static void getBeansByType(BeanFactory beanFactory) {
        User user = beanFactory.getBean(User.class);
        System.out.println("通过类型获取对象:" + user);
    }
    /**
     * 通过类型获取对象集合
     */
    private static void getCollectionBeansByType(BeanFactory beanFactory) {
        if(beanFactory instanceof ListableBeanFactory){
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map users = listableBeanFactory.getBeansOfType(User.class);
            System.out.println("通过类型获取对象集合:"+ users);
        }
    }
    /**
     * 通过指定注解获取对象
     */
    private static void getBeansByAnnoation(BeanFactory beanFactory) {
        if(beanFactory instanceof ListableBeanFactory){
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map users = (Map)listableBeanFactory.getBeansWithAnnotation(Super.class);
            System.out.println("通过指定注解@Super获取对象:"+ users);
        }
    }
}
public class ObjectProviderDemo {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(ObjectProviderDemo.class);
        applicationContext.refresh();
        ObjectProvider objectProvider = applicationContext.getBeanProvider(String.class);
        System.out.println(objectProvider.getObject());
    }

    @Bean
    public String getStr(){
        return "字符串对象";
    }
}



你可能感兴趣的:(Spring,spring)