Spring-重新认识IoC二

news/2025/2/13 0:38:44/

文章目录

  • 依赖查找的方式
  • 依赖注入的方式
  • 依赖查找和依赖注入的来源
  • Ioc配置源信息
  • BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器
  • 如何使用BeanFactory和ApplcationContext


依赖查找的方式

  • 根据 Bean 名称查找
    • 实时查找
    • 延迟查找
  • 根据 Bean 类型查找
    • 单个 Bean 对象
    • 集合 Bean 对象
  • 根据 Bean 名称 + 类型查找
  • 根据 Java 注解查找
    • 单个 Bean 对象
    • 集合 Bean 对象

依赖注入的方式

  • 根据 Bean 名称注入
    • 根据 Bean 类型注入
    • 单个 Bean 对象
    • 集合 Bean 对象
  • 注入容器內建 Bean 对象
  • 注入非 Bean 对象
  • 注入类型
    • 实时注入
    • 延迟注入

依赖查找和依赖注入的来源

  • 自定义 Bean
    • xml
    • 注解
  • 容器內建 Bean 对象
    • 比如Environment类
  • 容器內建依赖
    • 比如BeanFactory

Ioc配置源信息

  • Bean 定义配置
    • 基于 XML 文件
    • 基于 Properties 文件
    • 基于 Java 注解
    • 基于 Java API(专题讨论)
  • IoC 容器配置
    • 基于 XML 文件
    • 基于 Java 注解
    • 基于 Java API (专题讨论)
  • 外部化属性配置
    • 基于 Java 注解

BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器

  • BeanFactory 是 Spring IoC 容器最基本的接口,提供了创建、配置、管理和依赖注入等基本功能。它是一个轻量级的容器,适合于简单的应用场景。
  • ApplicationContext 是 BeanFactory 的子接口,除了继承了 BeanFactory 的所有功能外,还提供了一些高级特性。它是一个更加完整和强大的容器,适合于复杂的应用场景。ApplicationContext 除了 IoC 容器角色,还有提供:
    • 面向切面(AOP)
    • 配置元信息(Configuration Metadata)
    • 资源管理(Resources)
    • 事件(Events)
    • 国际化(i18n)
    • 注解(Annotations)

  因此,可以说 ApplicationContext 是 Spring IoC 容器的“超集”,提供了更多的功能和更完整的支持。在实际应用中,可以根据具体的需求选择使用 BeanFactory 还是 ApplicationContext。

如何使用BeanFactory和ApplcationContext

  前面我们说过,BeanFactory可以实现简单的Ioc容器的功能,如果我们只有配置并管理Bean的需求,可以使用BeanFactory,代码示例如下:

public class BeanFactoryIocContainer {public static void main(String[] args) {// 创建容器DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();// 加载Bean配置XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(defaultListableBeanFactory);String location = "classpath:/META-INF/dependency-lookup-context.xml";xmlBeanDefinitionReader.loadBeanDefinitions(location);// 获取BeanUser bean = defaultListableBeanFactory.getBean(User.class);}
}

  前面我们说过,ApplicationContext除了能实现BeanFactory的基本功能以外,还可以实现注解等额外功能,代码示例如下:

public class AnnotationApplicationContextIocContainer {public static void main(String[] args) {// 创建容器AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();// 将当前类作为配置类annotationConfigApplicationContext.register(AnnotationApplicationContextIocContainer.class);// 启动容器annotationConfigApplicationContext.refresh();// 获取BeanUser bean = annotationConfigApplicationContext.getBean(User.class);// 关闭容器annotationConfigApplicationContext.close();}@BeanUser user(){User user = new User();user.setId(1);user.setName("注解");return user;}
}

http://www.ppmy.cn/news/92713.html

相关文章

8.1.0版本ELK搭建,开启xpack认证机制

8.1.0版本ELK搭建,开启xpack认证机制 部署环境安排下载elk安装包服务器环境配置部署elasticsearch配置认证配置客户端加密的http通信修改elastic配置文件 部署kibana部署logstash部署httpd,filebeat配置kibana页面部署grafana配置grafana连接elastic 部署…

2022年都快结束了,还有人不会安卓录屏?在安卓上录制屏幕的的实现方式

前言 在我之前的文章 《以不同的形式在安卓中创建GIF动图》 中,我挖了一个坑,可以通过录制屏幕后转为 GIF 的方式来创建 GIF。只是当时我只是提了这么一个思路,并没有给出录屏的方式,所以本文的内容就是教大家如何通过调用系统 A…

考研C语言第四章

4.1 关系表达式与逻辑表达式 ps&#xff1a; 算术运算符&#xff1a;加减乘除等 关系运算符&#xff1a;比大小的 逻辑与逻辑或 非&#xff01;的运算级别&#xff08;应该&#xff09;最高 4.2 if-else #include <stdio.h> //上课这个写while的原因是方便一次一次…

2023-05-27 Unity 2进制4——类对象的序列化与反序列化

文章目录 一、序列化二、反序列化 一、序列化 &#xff08;一&#xff09;声明类对象 ​ 如果要使用 C# 自带的序列化 2 进制方法&#xff0c;申明类时需要添加[System.Serializable]特性。 [System.Serializable] public class Person {public int age 1;public string na…

Systrace系列6 —— Input 解读

本文主要是对 Systrace 中的 Input 进行简单介绍,介绍其 Input 的流程; Systrace 中 Input 信息的体现 ,以及如何结合 Input 信息,分析与 Input 相关的问题。 在Android 基于 Choreographer 的渲染机制详解 这篇文章中,我有讲到,Android App 的主线程运行的本质是靠 Mess…

DRF之过滤,排序,分页

一、权限组件源码解读 1.继承了APIView 才有的---》执行流程---》dispatch中----》三大认证 APIView的dispatch def initial(self, request, *args, **kwargs):self.perform_authentication(request)self.check_permissions(request)self.check_throttles(request) 2 读…

查找算法之散列表

一.说明 刚好复习数据结构&#xff0c;前面几篇博客我们知道了顺序查找、二分查找、分块查找、树形查找&#xff08;二叉排序树、平衡二叉树、红黑树、B树和B树&#xff09;&#xff0c;这一篇博客介绍常用查找算法中的最后一个算法——散列表&#xff08;哈希查找&#xff09…

怎么导入别人的android项目

到期末了好多同学都问我怎么把别人的安卓项目导进自己电脑里面&#xff0c;今天我来统一解答一下&#xff0c;希望有所帮助。 1.删除项目中原有的自动构建的文件 去到要导入项目的目录下把 .idea .gradle与build 三个文件夹&#xff0c;*.iml&#xff0c;local.properties删除…