5.Spring IoC依赖注入及依赖来源(SpringIoC概述)

5.Spring IoC依赖注入及依赖来源(SpringIoC概述),第1张

5.Spring IoC依赖注入及依赖来源(SpringIoC概述)

文章目录
  • 根据Bean名称注入
  • 根据Bean类型注入
    • 单个Bean对象
    • 集合Bean对象
  • 注入容器内建Bean对象
  • 注入非Bean对象
  • 注入类型
    • 实时注入
    • 延迟注入
  • 依赖来源
    • 自定义Bean
    • 内建依赖(非Bean)
    • 内建Bean

UserRepository类

public class UserRepository {

    private Collection users; // 自定义 Bean

    private BeanFactory beanFactory; // 內建非 Bean 对象(依赖)

    private ObjectFactory objectFactory;// ObjectFactory
}
根据Bean名称注入

按名称注入User

	 
        
                
                    
                        
                        
                    
                
    
		BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/meta-INF/dependency-injection-context.xml");
        // 依赖来源一:自定义 Bean
        UserRepository userRepository = beanFactory .getBean("userRepository", UserRepository.class);
        System.out.println(userRepository.getUsers());
根据Bean类型注入

设置autowire=“byType”

单个Bean对象 集合Bean对象 注入容器内建Bean对象

如BeanFactory(实现为DefaultListableBeanFactory)是容器内建依赖

		BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/meta-INF/dependency-injection-context.xml");
		// 依赖来源一:依赖查找 自定义 Bean
        UserRepository userRepository = beanFactory .getBean("userRepository", UserRepository.class);
		// 依赖来源二:依赖注入(內建依赖)
        System.out.println(userRepository.getBeanFactory());
		// 内建的BeanFactory与applicationContext不是一个BeanFactory
        System.out.println(userRepository.getBeanFactory() == beanFactory );//false
注入非Bean对象

由于内建的BeanFactory,不能通过getBean获取到,故不是容器中的Bean

		// 依赖查找(错误)
//        System.out.println(beanFactory.getBean(BeanFactory.class));
注入类型 实时注入 延迟注入
		BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/meta-INF/dependency-injection-context.xml");
		// 依赖来源一:依赖查找 自定义 Bean
        UserRepository userRepository = beanFactory .getBean("userRepository", UserRepository.class);
		// 延迟注入, 通过ObjectFactory 获取User对象时注入
		// private ObjectFactory objectFactory;
        ObjectFactory userFactory = userRepository.getObjectFactory();
        
		// 内建的BeanFactory与applicationContext不是一个BeanFactory
		//private ObjectFactory objectFactory;泛型改为BeanFactory,通过获取BeanFactory对象
        System.out.println(userFactory.getObject() == beanFactory );//true

内建的非Bean依赖,如BeanFactory ,由DefaultListableBeanFactory实现,与BeanFactory beanFactory = new ClassPathXmlApplicationContext)不是同一个。
由ObjectFactory延迟注入的BeanFactory与BeanFactory beanFactory = new ClassPathXmlApplicationContext)是同一个。
有点绕

依赖来源 自定义Bean

如User等自定的Bean对象

内建依赖(非Bean)

如BeanFactory,不能由getBean()得到

内建Bean
		// 依赖来源三:容器內建 Bean
        Environment environment = applicationContext.getBean(Environment.class);
        System.out.println("获取 Environment 类型的 Bean:" + environment);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4669015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存