重写并自定义依赖的原生的Bean方法

转载请注明出处:

在项目开发过程中,往往是直接应用很多jar包中依赖且声明好的Bean,拿来即用,但很多场景也需要对这些原生的Bean 进行自定义,定制化封装,这样在项目使用的过程中,可以使用自定义的Bean,而不是原生的Bean。下面总结了几种定制化原生Bean 的几种方式:

1. 在项目中创建同包同类名的类

这种方式使用较少,因为项目中的包路径根据开发规范是根据业务名自定义的包路径

2.使用 @Primary 注解,或 @Qualifier 注解,定义Bean 的优先级或使用时,指定Bean

  • @Primary 优先考虑,优先考虑被注解的对象注入
  • @Qualifier 名字声明,声明后对名字进行使用

当一个类有多个Bean的实例时,可以在 Bean 的实现类中 使用 @Primary 注解声明Bean 的优先级,在使用过程中,spring则默认加载该类实例化出的Bean。而 @Qualifiler 注解先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个;

@Primary 在源码中使用的示例: spring-cloud-starter-gateway 3.1.1 版本中的 GatewayAutoConfiguration 中的源码

@Qualiflier 注解使用,当一个类有多个Bean 实例时,在使用 Bean 时,通过 @Qualiflier 制定Bean

使用:

3. 使用 @ComponentScan 里面的 excludeFilters 排除不需要加载的类

示例如下,排除 MyTestFilter 类

这里需要注意的是,可以定义一个与原生相同的Bean,但在 上面引包的时候,需要引入的包路径是要排除的包路径,这样自定义的相同的类就可以加载到容器中,原生的Bean 则不会加载。

这种方式也是常用的方式;

4.使用 @Bean 注解覆盖原生的Bean

该场景针对,框架jar包中有@ConditionalOnMissingBean注解,这种注解是说明如果你也创建了一个一样的Bean则框架就不自己再次创建这个bean了,这样你可以覆写自己的bean。

直接继承要覆盖的类,自己重写里面方法,使用@Component注入到 spring 中去:

spring-cloud-starter-gateway 3.1.1 版本中的 GatewayAutoConfiguration 中的源码对 HttpClientFactory 的定义

重新自定义 该类的方法为: 直接继承要覆盖的类,自己重写里面方法,使用@Component注入到spring中去

5. 使用BeanDefinitionRegistryPostProcessor

使用 Spring 提供的 Bean 后置处理器,进行自定义的Bean 加载;

最常见的重写自定义Bean 的方式为以上的 2,3,4 三种方式,通过以上方式就可以实现重写并自定义原生的Bean;

Original: https://www.cnblogs.com/zjdxr-up/p/16533930.html
Author: 香吧香
Title: 重写并自定义依赖的原生的Bean方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613163/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 磁盘操作指令 dd

    dd if=/home/thotf/PaperOS/boot/mbr.bin of=/home/thotf/bochs/hd60M.img bs=512 count=1 conv=…

    Linux 2023年6月7日
    0105
  • 内存分配-slab分配器

    1 slab综述 1.1 slab分配器产生的背景 类似 task_struct mm_struct 等结构被内核中被频繁分配和释放,同时创建和销毁这些结构会产生一定的开销(ove…

    Linux 2023年6月7日
    073
  • 操作系统实现-printk

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们来实现最基础,也是最常见的函数 print,大家都知道这个是可变…

    Linux 2023年6月13日
    0101
  • linux下中文输入法问题

    故事背景:最近在做资产上报相关功能,要支持中文输入,如果正常快捷方式启动程序没问题,但是升级或者卸载重新安装,自启的时候是使用su usr -C XX.sh启动,root下启动没办…

    Linux 2023年6月13日
    077
  • Java动态脚本Groovy读取配置文件

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 核心涉及: @Value:作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值…

    Linux 2023年6月14日
    073
  • 记录XorDDos木马清理步骤

    1.检查 查看定时任务文件发现有两个异常定时任务 [root@manage ~]# cat /etc/crontab user-name command to be execute…

    Linux 2023年6月7日
    089
  • zookeeper 配置文件详情

    目录结构 目录名作用 bin 存放系统脚本 conf 存放配置文件 contrib zk附加功能支持 dist-maven maven仓库文件 docs zk文档 lib 依赖的第…

    Linux 2023年6月8日
    066
  • gitlab部署

    Gitlab部署 Gitlab部署 Gitlab的基本使用 新建项目 使用命令行的方式管理项目 上传文件 新建分支 拉取文件 //配置yum源 [root@localhost ~]…

    Linux 2023年6月13日
    099
  • 阿拉德之怒手游超详细图文架设教程

    写在前面 你是否还记得DNF,一天你不小心救了赛丽亚,从此变成了拯救阿拉德大陆的勇士,从此开始冒险之旅,不管你的职业是亲儿子还是下水道,你一直对你玩的角色情有独钟,在一次次刷图PK…

    Linux 2023年6月7日
    078
  • 5.4 Linux Vim基本操作

    《Vim三种工作模式》一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件。 首先学习如何使用 Vim 打开文件。 Vim 打开文件 使用 Vim…

    Linux 2023年6月7日
    093
  • Python递归遍历目录下所有文件

    递归遍历目录下所有文件 方法一 import os def gci(filepath): #遍历filepath下所有文件,包括子目录 files = os.listdir(fil…

    Linux 2023年6月13日
    0103
  • Web Api单元测试写法

    例如我们在Web Api项目中有个Controller 如果你在单元测试中直接调用 SomeController 的Get()方法,那么你将会收到一个Exception提示Requ…

    Linux 2023年6月14日
    084
  • 误操作使用fdisk删除了/root所在分区,该如何把文件拷贝出来

    误操作 fdisk命令误操作,将 /root 所在分区删除后新建了…… 恢复尝试1 起初以为是改一下 /etf/fstab 就好了,于是进入急救模式,尝试 …

    Linux 2023年6月8日
    0112
  • 关于多个 Cookie 的分隔符这件事

    对于 Cookie 的处理上,我最近遇到一个问题,那就是如何分割 Cookie 的内容。有人说是使用逗号分割,有人说是使用分号分割,究竟用哪个才是对的?其实这个答案是需要分为两个过…

    Linux 2023年6月6日
    087
  • oracle 触发器trigger(主键自增长)

    触发器我们也可以认为是存储过程,是一种特殊的存储过程。 存储过程:有输入参数和输出参数,定义之后需要调用 触发器:没有输入参数和输出参数,定义之后无需调用,在 适当的时候会自动执行…

    Linux 2023年6月7日
    080
  • Conky配置(中文备注)

    conkyrc地址:~/.conkyrc 需要注意的是,因为每个人的网卡都不同,所以在网络部分,例如 downspeed wlp0s20f3 ,后面的 wlp0s20f3 每个人都…

    Linux 2023年6月7日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球