这一行代码到底做了什么~终篇

一行代码可以做什么?神奇! 在编程的世界里,一行精妙的语句可能胜过 100 行赘述。 能删库跑路 这行指令就像是在你的所有文件上浇汽油然后一把火把他们全烧了。 sudo rm -rf /* 能让电脑死机 :(){:|:&};: 能让你上演黑客帝国 sudo apt-get install hollywood cmatrix 能追心仪对象 这行代码能展示出一个心型: print('\n'.join(... 阅读详情

每天叫醒你的不是闹钟,而是梦想

● 续言

    前面我们已经提到Spring的BeanFactory工厂了,回顾请点击 -> 这一行代码到底做了什么?,那么我们如何通过这个BeanFactory来干涉Spring Bean的构建呢?

● BeanFactoryPostProcessor的使用

    Spring为了让我们方便干涉Bean工厂,提供一个BeanFactoryPostProcessor接口。

@Component
public class BeanFactoryPostProcessorImpl implements BeanFactoryPostProcessor {
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
            throws BeansException {
        //  获取memberService得BeanDefinition对象。
        GenericBeanDefinition memberDefinition = (GenericBeanDefinition) beanFactory.getBeanDefinition("memberServer");
        // 用context.getBean(UserService.class)拿UserService对象
        // 修改memberDefinition的Bean类   
        memberDefinition.setBeanClass(UserService.class);
    }
}

     我们只是把MemberService交给Spring进行管理,而UserService并没有。但是由于我们通过BeanFactoryPostProcessor来干涉Bean的创建,造成的结果是:    

// 不可以取到MemberService的bean对象
context.getBean(MemberService.class);   
// 可以取到UserService的bean对象
context.getBean(UserService.class);  

● BeanFactoryPostProcessor执行时机

    在第一篇的推文中有写到,AnnotationConfigApplicationContext的构造器会调用refresh的方法。这一个方法可以说是Spring中最重要的方法了。我们不得不来研究它里面做了些什么事情。

public void refresh() throws BeansException, IllegalStateException {
    synchronized(this.startupShutdownMonitor) {
        //准备工作包括设置启动时间,是否激活标识位
        this.prepareRefresh();
        //返回一个bean工厂
        ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
        //准备工厂
        this.prepareBeanFactory(beanFactory);
        try {
            //这个方法在当前版本是没有代码的,
            this.postProcessBeanFactory(beanFactory);
            //在spring的环境中去执行已经被注册的factory Processors
            //设置执行自定义的ProcessBeanFactory和spring内部自己定义ProcessBeanFactory
            //重要用来扫描并且注册到我们beanDefinitionMap中
            //beanDefinitionNames也有存上一份
            this.invokeBeanFactoryPostProcessors(beanFactory);
            //注册beanPostProcessor
            this.registerBeanPostProcessors(beanFactory);
            this.initMessageSource();
            this.initApplicationEventMulticaster();
            this.onRefresh();
            this.registerListeners();
            //实例化bean的方法
            //里面调用beanFactory.preInstantiateSingletons()实例化
            this.finishBeanFactoryInitialization(beanFactory);
            this.finishRefresh();
        } catch (BeansException var9) {
            if (this.logger.isWarnEnabled()) {
                this.logger.warn("Exception encountered during context initialization - cancelling       refresh attempt: " + var9);
            }
            this.destroyBeans();
            this.cancelRefresh(var9);
            throw var9;
        } finally {
            this.resetCommonCaches();
        }
    }
}

        在this.invokeBeanFactoryPostProcessors(beanFactory)执行前的beandefinitionMap的数据,有6个是spring在此前自己注册的,还有一个是我们的java配置类。spring注册的处理器主要是根据java配置类的规则,判断出那些类要交给Spring产生Bean对象。把那些符合规则的类,生成一个BeanDefinition对象,存进beandefinitionMap里面,并且在beanDefinitionNames也存放它的名字。

    而我们自己写的BeanFactoryPostProcesssor是在Spring自己的Processor执行完后在执行的,因为Spring的那些执行完,才可以取得到我们那些带@Component的类。

● 有图有真相

this.invokeBeanFactoryPostProcessors(beanFactory)执行前的断点图

this.invokeBeanFactoryPostProcessors(beanFactory)执行后的断点图

   finishBeanFactoryInitialization(beanFactory)方法的作用是创建出Bean的,而那些BeanFactoryPostProcessor是在他之前执行的。那么我们就可以通过改变beandefinitionMap存放的信息,最终改变创建出来的Bean。

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

基于Arduino 的 FM 调频收音机 这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议进行通信的方法,整个过程只需要两根线就可以与 IC 通信,接线非常简单。3D 打印的外壳也非常简洁。总之,是个非常简单和实用的项目,来试试吧! 阅读详情

相关推荐

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。

qq_41525079的博客 849

杂谈——一行代码可以做什么?

文章目录01、数据库之从删库到跑路02、瞬间把一台机器卡死03、无限err文件04、程序员的浪漫05、开天辟地06、去往山南海北07、黑客帝国08、创建服务器09、一个可爱的水族馆10、面向stackoverflow编程11、Js一句代码帮你骂人12、FBI WARNING13、FBI WARNING 一行代码可以做什么? 一句代码,想做什么就做什么!!! 01、数据库之从删库到跑路 sudo...

种树最好的时间是10年前,其次是现在!!! 3020

手把手教你用STM32CubeMX和HAL库驱动MT6835磁编码器(SPI读取21位角度)

本文详细介绍了如何使用STM32CubeMX和HAL库驱动MT6835磁编码器,通过SPI接口读取21位高精度角度数据。从硬件准备、CubeMX配置到HAL库驱动实现与优化,提供了完整的实战指南,帮助开发者快速掌握磁编码器的应用技巧,适用于机器人关节和精密仪器等高精度场景。

weixin_28716769的博客 439

python一行代码实现动态爱心

某天,女朋友问:亲爱的,你学了python,具体有什么作用呢? 小王一阵激动,心想:表现的机会来了!看我的!

16万+

手把手教你用TP4056和PMOS管搭建锂电池自动切换电路(含元器件选型指南)

本文详细介绍了如何使用TP4056和PMOS管搭建锂电池自动切换电路,包括核心架构设计、元器件选型指南和PCB布局优化。通过智能充电算法和电源路径切换模块,实现外部供电与锂电池的无缝切换,提升便携式设备的电源管理效率。

julia4scientist的博客 887

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1237

一行代码能做什么

一行代码能做什么 像这样: 这行代码能展示出一个心型: print(’\n’.join([’’.join([(‘Love’[(x-y) % len(‘Love’)] if ((x0.05)**2+(y0.1)**2-1)**3-(x0.05)*2(y0.1)**3 <= 0 else ’ ') for x in range(-30, 30)]) for y in range(30, -30, -1)])) 这样: 能飞速创建一个服务器 python -m http.server 这样 能解决一道算法题

xiaoxinxin1230的博客 289

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 673

一行python代码能够做什么

公众号:尤而小屋作者:Peter编辑:Peter 大家好,我是Peter~ Python以其语法简洁著称。在学习Python的过程中,总是会发现Python能够轻而易举地帮助我们解决许多问题。 有时候看似复杂的任务,甚至是可以使用一行Python代码就可以搞定。 下面Peter给大家介绍40个有趣且实用的Python的一行代码,让我们一起来感受Python的强大~ 打印hello python 每个人都是从print函数开始的 print("hello python") hello pytho.

尤尔小屋 1403

睿抗机器人魔力元宝在完成任务过程中如何使机械臂先到达白色盒子上方而不是先到达工作台?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1376

RK3588 Android12 添加HDMI和喇叭声音通道切换选项

rk3588 android12系统默认接hdmi out时,声音会切换到hdmi out输出,主板声卡喇叭输出会没有声音输出。现在添加一个选项设置hdmi out时,声音可以保持主板声卡喇叭输出。

Android系统开发笔记 4162

一行代码可以做什么?程序员:删库跑路

一行代码可以做什么?程序员:删库跑路 今天我们来聊聊一行代码可以干些什么 为所欲为 我的另一篇博客:一行代码搞定网页内容增删改 百度文库亲测可用 就是下面这句代码,你见识完之后,别忘了给我点赞就好。 操作如下: 在网页中点击F12,任意页面都行。 在弹出的调试面板最上面选中Console,然后输入上面这行代码,回车。 好了,整个网页你可以随便编辑了。 document.body.contentEditable='true'; 删库跑路 这行指令就像是在你的所有文件上浇汽油然后一把火把他们全烧了。 s

SR02020的博客 2518

1.2 amdgpu_bo的设计分析 — gem层和ttm层

本文分析了AMD KFD的BO设计架构,重点介绍了DRM子系统中缓冲对象的多层继承关系。文章首先展示了核心继承层次图,包括DRM通用层(drm_gem_object)、TTM内存管理层(ttm_buffer_object)、AMD驱动层(amdgpu_bo)和KFD计算层(kgd_mem)。随后详细解析了drm_gem_object结构体的关键功能,包括用户空间接口管理、内存映射支持、引用计数机制以及DMA-BUF导入/导出功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2537

一行python代码能干_一行Python代码代码能做什么

一行Python代码代码能做什么,这是一个充满想象力的好问题,我这边分分两种情况:PYthon代码,非Python代码。如果你有更有意思的欢迎补充。喜欢给赞!Python代码实现1、一行代码输出特定字符"Love"拼成的心形print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-...

weixin_40005542的博客 422

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

一行python能做什么!

主要收集了平常遇到的代码和网上的简单题目,然后尝试将代码压缩到一行,仅仅是娱乐一下~~~−−−−−(1)−−−−−−-----(1)------用一行python写出一个嵌套的字符串。def plat(ch,n):return''if ~n else ' '*(n-1)+ ch+ch[::-1][1:]+'\n'+plat(ch+chr(ord(ch[-1])+1),n-1)结果如图: 上面这个返

pyb的博客 3126

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

骂人的代码_一行代码可以做什么?

在编程的世界里,一行精妙的语句可能胜过 100 行赘述。能删库跑路这行指令就像是在你的所有文件上浇汽油然后一把火把他们全烧了。sudo rm -rf /*能让电脑死机:(){ :|: & };:能让你上演黑客帝国sudo apt-get install hollywood cmatrix能追心仪对象这行代码能展示出一个心型:print('\n'.join([''.join([('...

weixin_39793098的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JS 从入门到抢月饼:一行代码可以做什么?

点击上方“程序人生”,选择“置顶公众号”第一时间关注程序猿(媛)身边的故事作者小七整理https://www.zhihu.com/question/285586045俗话...

程序人生的博客 1731

一行Python代码,畅玩童年经典游戏~

大家好,我是丁小杰! 今天在Github上看到一个有趣的Python项目free-python-games,它包含了22个简单的小游戏,所有游戏都是使用Python和它的Turtle模块实现的,Windows、Mac OS或Linux皆可运行,我们先来看看有哪些游戏! Snake 贪吃蛇——经典街机游戏。 Pacmax 吃豆人——经典街机游戏。 Cannon 加农炮——抛射运动。类似愤怒的小鸡~ Maze 迷宫小游戏 Pong 碰球——经典街机游戏。 满满的童年回忆,其他的游戏就等待大家自己去尝试

向日葵的专属太阳 1万+

真神器!不用手写一行代码就能做网站~

点击上方“一行数据”,选择“加为星标”第一时间关注Python技术干货!制作网站用什么,Dreamweaver 还是 Fireworks?现在,用 GPT-3 就可以。一位来自旧金山的程...

一行玩python 579

一行 Python 代码写的游戏,我能这样玩一天~

Python长期霸占编程语言排行榜前三位,最近更是连续几年蝉联兵器谱排行第一名。Python语言简洁,功能强大,越来越多的小伙伴开始学习Python 。甚至K12的同学都开始学习Python 编程。新手入门的时候趣味性其实最重要的。那么一行Python 代码到底能玩出什么花样,有什么趣味的游戏用一行代码就能搞定了,小编也是大开眼...

AI科技大本营 2349

一行Python代码能够做什么

Python以其语法简洁著称。在学习Python的过程中,总是会发现Python能够轻而易举地帮助我们解决许多问题。有时候看似复杂的任务,甚至是可以使用一行Python代码就可以搞定。下面给大家介绍40个有趣且实用的Python的一行代码,让我们一起来感受Python的强大~

Everly_的博客 118

python爱心代码_一行代码,用Python能做出什么有趣的功能?

python有很多优雅有趣的代码写法,同时还很简短,以至于当我刚开始接触这个编程语言的时候,就爱不释手。对编程感兴趣,对Python感兴趣,可以关注我噢·~私信发送“获取”,更可以免费获得Python学习资料~python到底有多有趣呢?一行代码告诉你!1.画爱心print(''.join([''.join([('PYTHON!'[(x-y)%10]if((x*0.05)**2+(y*0.1)**...

weixin_39759155的博客 2218

“一行 Python 代码可以干什么?”“可以表白啊”

“一行 Python 代码可以干什么?”“可以表白啊!”print('\n'.join([''.join([('love'[(x-y) % len('Love')] if...

实验楼 2110

smol developer 全程序生成实战:从 shared_deps.md 共享依赖契约解读 AI 生成的 Pong 游戏架构

`shared_deps.md` 是 smol developer(当前仓库即其 v1 版本)在多文件程序生成管线中产出的关键中间产物:一份用 Markdown 写成的“共享依赖契约”。本文以仓库中 [examples/v1_pong_game/shared_deps.md](https://link.gitcode.com/i/467210b6c93cd6b48e674aac2a788849)

gitblog_00447的博客 243

c语言~符号什么意思_C语言:代码中的每一行表示什么意思?

1. #include<stdio.h>2. int main(){3. printf("hello world");4. return 0; }上面四行程序每一行都是什么意思呢?为什么运行这四行程序就可以在终端输出“hello world”呢?哈哈,我先把答案写在这,然后再在下面详细解释它们的含义:第一行表示引入头文件,第二行是主函数,第三行是调用一个名叫printf的函数输出“he...

weixin_39958631的博客 1113

python一行代码太长_25条很棒的Python一行代码,太赞了!

留言有礼,我们每天会从留言中抽取三位幸运粉丝赠送6.6元红包~自从我用Python编写第一行代码以来,就被它的简单性、出色的可读性和特别流行的一行代码所吸引。在下面,我将给大家介绍并解释一些Python一行程序。可能有些你还不知道,但对你未来的Python项目很有用。▍1、交换两个变量#a=4b=5a,b=b,a#print(a,b)>>5,4让我们通过交换两个变量作为一个简单的开始。...

weixin_39882948的博客 483
上一篇: 面试官问我synchronized的底层实现,我差点哭了
下一篇: ActiveMQ入门demo
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值