spring-core-3-28 | 使用Spring IoC容器:选BeanFactory还是ApplicationContext?

Kettle实战:如何用JavaScript脚本实现数据库表批量操作(附完整代码) 本文详细介绍了如何利用Kettle的JavaScript脚本实现数据库表批量操作,包括表名采集、循环遍历和动态SQL生成等关键步骤。通过实战案例和完整代码示例,帮助ETL工程师高效处理数据密集型任务,提升数据库操作的自动化水平。 阅读详情

使用Spring IoC 容器

BeanFactory 是Spring 底层IoC 容器

ApplicationContext 是具备应用特性的BeanFactory 超集

以前有种结论:BeanFactory 是 Spring 框架自己用的,ApplicationContext 是给开发者用的。

代码示例

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.geekbang.thinking.in.spring.ioc.overview.container;

import org.geekbang.thinking.in.spring.ioc.overview.domain.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;

import java.util.Map;

/**
 * 28 | 使用Spring IoC容器:选BeanFactory还是ApplicationContext?
 *
 * {@link BeanFactory} 作为 IoC 容器示例
 * BeanFactory 是Spring 底层IoC 容器, 从下面的例子可以看出, 如果你没有什么复杂的路径之类, BeanFactory 完全可以胜任你的工作
 *
 * @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
 * @since
 */
public class BeanFactoryAsIoCContainerDemo {

    public static void main(String[] args) {
        // 创建 BeanFactory 容器
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        // 创建 XmlBeanDefinitionReader 用来读取配置, 这个类是一个底层的API
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
        // XML 配置文件 ClassPath 路径
        String location = "classpath:/META-INF/dependency-lookup-context.xml";
        // 加载配置
        int beanDefinitionsCount = reader.loadBeanDefinitions(location);
        System.out.println("Bean 定义加载的数量:" + beanDefinitionsCount);
        // 依赖查找集合对象
        lookupCollectionByType(beanFactory);
    }

    private static void lookupCollectionByType(BeanFactory beanFactory) {
        if (beanFactory instanceof ListableBeanFactory) {
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
            System.out.println("查找到的所有的 User 集合对象:" + users);
        }
    }

}

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.geekbang.thinking.in.spring.ioc.overview.container;

import org.geekbang.thinking.in.spring.ioc.overview.domain.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Map;

/**
 * 注解能力 {@link ApplicationContext} 作为 IoC 容器示例
 * ApplicationContext 是具备应用特性的BeanFactory 超集
 *
 * @Configuration 注册并不是必须的,不过标注它之后 Bean 的类被 CGLib 提升。
 * @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
 * @since
 */
@Configuration
public class AnnotationApplicationContextAsIoCContainerDemo {

    public static void main(String[] args) {
        // 创建 BeanFactory 容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        // 将当前类 AnnotationApplicationContextAsIoCContainerDemo 作为配置类(Configuration Class)
        applicationContext.register(AnnotationApplicationContextAsIoCContainerDemo.class);
        // 启动应用上下文
        applicationContext.refresh();

        // 依赖查找集合对象
        lookupCollectionByType(applicationContext);

        applicationContext.close();

    }

    /**
     * 通过 Java 注解的方式,定义了一个 Bean
     * 相当于用 Java 代码 进行配置
     */
    @Bean
    public User user() {
        User user = new User();
        user.setId(1L);
        user.setName("小马哥");
        return user;
    }

    private static void lookupCollectionByType(BeanFactory beanFactory) {
        if (beanFactory instanceof ListableBeanFactory) {
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
            System.out.println("查找到的所有的 User 集合对象:" + users);
        }
    }

}

15张图详解三方支付:总架构、5大核心业务处理流程、备付金管理 用户可以将银行卡与零钱账户绑定,建立银行结算账户与支付账户的连接,然后将银行账户资金充值到零钱账户中,或将零钱账号中的余额提现至绑定的银行卡。因此,用户在A支付机构的零钱一般只能支付给A支付机构的商户,如支付宝的零钱不能支付给微信的商户。这五大业务的协同运作,使得第三方支付机构这一庞大的支付服务平台能够为市场提供卓越的支付能力。到了结算时间,网联会向备付金集中存管账户提交结算指令,在第三方支付机构备付金集中存管账户内完成最终的结算,并将结算结果及额度变动情况通知给第三方支付机构,具体流程如图13所示。 阅读详情

相关推荐

kali设置安装burpsuite中文版

工具:通过网盘分享的文件:Burpsuite 链接:提取码: jay1。

m0_74786138的博客 5202

BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器

先说结论:BeanFactory和ApplicationContext都是spring的IOC容器。 为什么这么说呢,因为ApplicationContext是BeanFactory的一个子类,所以BeanFactory拥有的功能ApplicationContext都是具备的,但是在spring中又不是直接在ApplicationContext中调用BeanFactory相关方法的,而是用了一个组合的方式。 由上图可以看出,在AbstractApplicationContext中开始定义了一个getBea

qq_43578218的博客 700

避坑指南:Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复

本文详细介绍了在Ubuntu 22.04上源码编译Autoware.universe(Humble版)的完整流程与常见错误修复方法。从环境准备、依赖安装到编译优化,提供了实用的避坑指南和解决方案,帮助开发者高效完成安装并避免常见问题。特别针对源码安装过程中的疑难杂症给出了具体修复建议。

weixin_33712987的博客 382

Spring IoC容器与BeanFactory、ApplicationContext接口

Spring框架的主要功能是通过其IoC容器来实现的,它可以容纳我们所开发的各种Bean,并且我们可以从中获取各种发布在Spring IoC容器里的Bean。 Spring IoC容器的设计主要基于BeanFactory和ApplicationContext两个接口。 BeanFactory Spring IoC设计的核心是Bean容器,BeanFactory是Spring IoC容器的核心接口,采用了java经典的工厂模式,由org.springframework.beans.factory.BeanFa

yinianxx的博客 361

PythonWeb开发框架—Django之工程创建和models的定义和增删改查

文章介绍了Django工程的创建、models的定义和增删改查

weixin_42476668的博客 990

从零开始:如何在Windows上搭建Airsim仿真环境(避坑指南)

本文是一份详细的Windows平台AirSim仿真环境搭建指南。文章从硬件要求、Visual Studio与虚幻引擎安装开始,逐步讲解AirSim插件编译、UE项目配置,并重点介绍了通过WSL2连接PX4飞控软件实现软件在环仿真的完整流程。内容涵盖常见问题排查与性能优化,旨在帮助开发者避开常见陷阱,高效构建可用于无人机算法开发的虚拟测试平台。

earth的博客 301

深度理解Spring IoC底层实现:探索BeanFactory和ApplicationContext

Spring IoC容器是Spring框架的核心组件之一,负责管理组件之间的依赖关系,并通过依赖注入(DI)机制将组件解耦。本文将深度理解Spring IoC底层实现,探索BeanFactory和ApplicationContext的工作原理和实现方式,包括IoC容器的实现原理中的BeanDefinition、BeanFactoryPostProcessor、BeanPostProcessor、BeanWrapper和BeanFactoryAware等关键技术。通过了解IoC容器的底层实现,可以更好地理解S

2201_75630288的博客 217

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1228

Spring篇——IOC容器至关重要的BeanFactory、ApplicationContext底层实现、两个API的区别等技术点,保姆级教程!

1、BeanFactory在加载配置文件的时候,不会创建对象,在获取对象或者使用对象的时候才会创建Bean对象; 而ApplicationContext在加载配置文件的时候,就会创建配置文件中的对象。一般在操作中,会选择使用ApplicationContext,启动项目的时候就创建需要的对象,把耗时耗资源的步骤都交给服务器。

我热爱学习,也乐于分享。无论是科技前沿的洞见,还是生活中的小技巧,我都会在这里与你分享。我相信,知识就是力量,而分享则能让这份力量得到更好的传递。 1425

UI渲染顺序:合批为何被拆碎?

在 Hierarchy 中,避免出现:Image(列表1) → Text(列表1) → 特效 → Image(列表2) → Text(列表2)…若可行,在逻辑上把布局组织成“同类元素集中”:例如:列表行中,Image 集中、Text 集中;或者接受 Text 本身就拆出一批,关键是不要在 Text 中间再插入别的材质。现实中不一定能做到完美的“所有 Image 连在一起”,但你会有一个意识:同一 Canvas 内,如果你把不同材质的元素交错穿插,

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 85

太阳敏感器:卫星姿态控制的“指南针

在卫星姿态控制系统中,太阳敏感器(Sun Sensor) 是至关重要的光学姿态敏感器之一。它通过探测太阳光的方向,为卫星提供关键的姿态参考信息,确保卫星能够正确调整自身方位,维持稳定的对日定向,保障能源供应和任务执行。

ScilogyHunter的博客 1730

Spring BeanFactory和ApplicationContext详解

1. Spring IOC容器理解 spring容器可以理解为生产对象(OBJECT)的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期--创建、装配、销毁。而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC容器,而这里IOC容器不只是Spring才有,很多框架也都有该技术。 2.BeanFactory和Application...

傅红雪的专栏 1559

【DaVinci Configurator专题】-5-通过Data Mapping自动创建CAN信号关联的Port并添加到APP SWC

目录 1 导入CAN Matrix变更后的Arxml文件 2 自动创建CAN信号关联的APP Port 3 CAN信号与App SWC的接口映射/连接 4 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: DaVinci Developer DaVinci Configurator Pro ARXML AUTOSAR System Description Network Explorer 1

「汽车电子助手」的博客 5130

Spring框架:核心容器总结

最近想要深入了解一下spring,所以今天先对spring框架做一个宏观的总结。 Spring框架: 首先我们看到Spring框架被分成7部分:Core Container(核心容器),Data Access/Integration、WEB、AOP、Instrumentation、Messaging(消息)和Test(测试),这篇博客我们把注意点放到最核心的核心容器上来进行总结。 核心容器核心容器

当一堆用不熄灭的柴火 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring学习笔记:(一)IOC容器加载过程

1. Spring框架功能整体介绍 1.1 Spring Core Container 作用: Core 和 Beans 模块是框架的基础部分,提供 IoC (转控制)和依赖注入特性。 这里 的基础 概念是 BeanFactory,它提供对 Factory 模式的经典实 现来消除对程序’性单 例模式的需要,并真 正地允许你从程序逻辑中分离出依赖关系和配置 Beans (BeanFacotry的作用):包含访问配直文件、创建和管理 bean 以及进行 Inversion of Control I Dep

xueguchen的博客 1165

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

spring-core-3-26 | Spring IoC容器:BeanFactory和ApplicationContext谁才是Spring IoC容器?

Spring IoC 容器 BeanFactory 和ApplicationContext 谁才是Spring IoC 容器? 真正的IOC的底层实现就是BeanFactory的实现类,但ApplicationContext 在底层组合了一个 BeanFactory 实现,是委托DefaultListableBeanFactory来操作getBean等方法的。 也因此 System.out.println(userRepository.getBeanFactory() == applicationConte

sunforraining的博客 221

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Core 之 The IOC Container Overview(IOC容器概述)

文章目录The IoC Container一、Overview1、Introduction to the Spring IoC2、Container Overview The IoC Container 一、Overview 1、Introduction to the Spring IoC IoC is also known as dependency injection .It is a process whereby objects define their dependencies (that is,

qq_38515961的博客 523

Spring IOC 容器源码解读

name: spring-ioc title: Spring IOC 容器源码分析 date: 2020-05-22 16:25:30 tags: categories: open-source Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Sp.

孤刺 1248

spring core之Ioc介绍

1、ApplicationContext是BeanFactory的子接口。 2、BeanFactory提供配置框架和基本功能,ApplicationContext添加更多特定于企业的功能。 3、org.springframework.context。ApplicationContext接口表示Spring IoC容器,并负责实例化、配置和组装bean 4、Spring提供了Applicati...

lm2640370750的博客 406

(一)Spring Core(核心容器)

Spring Core 核心容器是 Spring 框架的核心部分,负责管理应用中对象的生命周期、依赖注入等基础功能。它通过控制反转(IOC)实现了应用程序中对象的解耦,使得开发者可以集中精力在业务逻辑的实现上,而不用担心对象的创建和管理。

qq_50847694的博客 1284

Spring 的Core模块

回到首页☞ Core模块主要的功能是实现了反向控制IOC(Inversion of Control)与依赖注入DI(Dependency Injection)、Bean配置以及加载。Core模块中有Beans、BeanFactory、BeanDefinitions、ApplicationContext等几个重要概念。 Beans为Spring里的各种对象,一般要配置在Spring配置文件中:Bea...

JDIT的博客 2099

Spring Core深度解析:IoC与DI如何让你的代码像奶茶一样丝滑?

解耦神器:通过IoC/DI实现组件松耦合效率工具:自动管理对象生命周期扩展基石:为AOP、事务等高级特性打下基础你的项目中有没有被Spring Core拯救过的场景?欢迎评论区分享!(建议结合Spring官方文档实践,本文代码适用于学习交流)

程序猿小白菜 1109

深入源码了解spring之IOC容器

前言 Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。而 Spring 框架的系统架构简要说明如下:         Spring 总共大约有20个模块,由1300多个不同的文件构成。而这些组件被分别整合在核心容器(Core Conta

believedark的博客 399

ioc 3.0 spring 容器和bean

bean 在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。 容器(兵工厂) org.springframework.beans.factory.BeanFactory 是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bea

大风起兮 277

【Spring】Spring Core解析

Spring Core是Spring框架的基石模块,通过控制反转(IoC)和依赖注入(DI)实现对象解耦管理。IoC将对象生命周期交给容器管理,DI自动处理对象依赖关系。核心组件包括Bean(容器管理对象)、BeanFactory(基础容器)、ApplicationContext(增强容器)和BeanDefinition(对象元数据)。实际开发中通过注解定义Bean(如@Service/@Repository),使用ApplicationContext获取和使用Bean,推荐构造器注入方式。Spring C

瘦到被风吹走的博客 668

spring-core 源码学习-IOC体系(一)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

sunchuanwen1111的博客 434
上一篇: spring-core-3-27 | Spring应用上下文:ApplicationContext除了IoC容器角色,还提供哪些特性?
下一篇: spring-core-3-29 | Spring IoC容器生命周期:IoC容器启停过程中发生了什么?
sunforraining
博客等级 码龄9年 13粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值