惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 时空穿越者

java并发:深入解析 ThreadPoolExecutor.addWorker() 流水线技术解析:处理器重排序的硬件基础 java并发:synchronized 揭秘 java并发:管道流(Piped Streams)的应用场景 java并发:再次认识一下Java中的锁 —— 类级别的锁是否存在? LangGraph:add_conditional_edges详解 Spring异步机制:@Async Spring BeanDefinition Spring Resource Spring之ApplicationContext Spring之BeanFactory:解析getBean()方法 Spring的整体架构 Spring Data JPA:解析CriteriaQuery Spring Data JPA:解析CriteriaBuilder Spring Data JPA:解析JpaSpecificationExecutor & Specification Spring Data JPA:解析SimpleJpaRepository java并发:线程池之Executors(ScheduledExecutorService篇) - 时空穿越者 java并发:线程池之饱和策略 java并发:线程池之ThreadPoolExecutor
Spring之IoC容器
时空穿越者 · 2021-09-04 · via 博客园 - 时空穿越者

Spring框架的主要特性之一是IoC(控制反转)容器,它负责管理应用程序中的对象,它通过依赖注入来实现控制反转。

org.springframework.beans 和 org.springframework.context 包路径下的接口或者类为Spring IoC容器的实现提供最基本的支持。 

BeanFactory和ApplicationContext接口代表了Spring IoC容器。

  • BeanFactory是Spring IoC容器的根接口,它提供了管理bean的基本功能。
  • ApplicationContext是BeanFactory的子接口,它具备BeanFactory的所有功能;此外,它还提供了更多特定于企业的功能。

BeanFactory

BeanFactory使得开发人员能够读取bean的定义并访问对应实例,如下:

InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
 
//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");

其他创建BeanFactory的方法如下:

Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);

或者

Resource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);

BeanFactory methods

此处简单解释一下其中部分方法,见下表:

类图

ApplicationContext

由于ApplicationContext包含了BeanFactory的所有功能,所以通常建议使用它而不是BeanFactory。

类图

Note:

BeanFactory 是 Spring 框架的基础设施,面向 Spring 框架本身;而ApplciationContext 面向使用 Spring 框架的开发者,几乎所有应用场合都直接使用 ApplicationContext,而非底层的 BeanFactory

ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

延申阅读

控制反转是一种思想

依赖注入是一种实现方式

详解:

将控制反转作为一种设计指南,可以达到以下目的:

  • 某个任务的执行与实现之间存在解耦,每个模块都可以专注于它的设计目的
  • 更换模块对其他模块没有副作用

Spring 框架使用依赖注入作为实现控制反转的方式,但是控制反转还有其他实现方式,如下:

补充:

不能将控制反转和依赖注入等同。