ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?

2021-02-19 21:05:21  阅读:206  来源: 互联网

标签:ApplicationContext 依赖 BeanFactory Spring Bean public 注入


Spring 容器最基本最基本的接口就是BeanFactory。BeanFactory负责配置,创建、配置Bean,其中有一个子接口ApplicationContext,也被称为Spring上下文。容器同时还管理这Bean和Bean之间的依赖关系


Spring IoC容器的实现,从根源上是BeanFactory,但是真正作为一个可以独立使用的IoC容器的还是DefaultListableBeanFactory因此可以说DefaultListableBeanFactory是整个Spring IoC的始祖


上一篇文章简单阐述Spring的依赖查找方式

  • 通过Bean 名称查找.  

    Object getBean(String name)

  • 通过Bean 的类型查找  

    <T> T getBean(Class<T> requiredType)

  • 通过Bean 的名称+类型组合查找

    <T> T getBean(String name, Class<T> requiredType)

  • 通过注解查找

    Map<String, Object> getBeansWithAnnotation(Class<? extendsAnnotation> annotationType)


如果说BeanFactory 是Spring 的心脏,那么ApplicationContext就是完美的身躯,继承BeanFactory接口,除了包含BeanFactory的所有功能之外。在国际化、资源访问(如:URL和文件)、事件传播等方面进行了良好支持

图片

在获取ApplicationContext实例后,就可以像BeanFactory一样调用getBean(beanName)返回Bean了。ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例化目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean,通过ApplicationContext的依赖树图,不难发现Spring Bean的依赖注入来源

  • 自定义的Bean

  • 依赖注入Bean  (如:内建依赖 BeanFactory)

  • 容器内建依赖 Bean (如:容器内建 Environment)


依赖注入案例

























public class UserRepository {    private Collection<User> users;  // 自定义 Bean    private BeanFactory beanFactory; // 內建非 Bean 对象(依赖)    private ObjectFactory<ApplicationContext> objectFactory;     public Collection<User> getUsers() {        return users;    }    public void setUsers(Collection<User> users) {        this.users = users;    }    public void setBeanFactory(BeanFactory beanFactory) {        this.beanFactory = beanFactory;    }    public BeanFactory getBeanFactory() {        return beanFactory;    }    public ObjectFactory<ApplicationContext> getObjectFactory() {        return objectFactory;    }    public void setObjectFactory(ObjectFactory<ApplicationContext> objectFactory) {        this.objectFactory = objectFactory;    }}

图片





















public class DependencyInjectionDemo {
   public static void main(String[] args) {        // 启动 Spring 应用上下文        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/META-INF/dependency-injection-context.xml");
       // 依赖来源一:自定义 Bean        UserRepository userRepository = applicationContext.getBean("userRepository", UserRepository.class);
       // 依赖来源二:依赖注入(內建依赖)        System.out.println(userRepository.getBeanFactory());
       ObjectFactory<ApplicationContext> userFactory = userRepository.getObjectFactory();        System.out.println(userFactory.getObject() == applicationContext);
       // 依赖来源三:容器內建 Bean        Environment environment = applicationContext.getBean(Environment.class);        System.out.println("获取 Environment 类型的 Bean:" + environment);    }}

图片


标签:ApplicationContext,依赖,BeanFactory,Spring,Bean,public,注入
来源: https://blog.51cto.com/15057823/2632297

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有