文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot怎么删除引用jar包中的无用bean

2023-07-02 12:38

关注

这篇文章主要讲解了“SpringBoot怎么删除引用jar包中的无用bean”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么删除引用jar包中的无用bean”吧!

前言

公司有个项目,时间比较赶,而且项目的部分需求,和之前做的项目部分功能一样,为了赶速度和直接将之前多模块的maven项目中的部分模块,直接以jar包的形式引入到新项目中了,虽然省去了不少开发时间,但是造成项目需要导入引入项目jar的相关依赖,导致项目臃肿,启动很慢。有没有办法让项目只加载自己需要的bean呢?

当然我们可以直接修改源代码重新打包引入去解决,但是这个办法太多麻烦。

通过百度的手段,查询可以在springboot启动类上用@ComponentScan注解去实现

代码示例

@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,        pattern = {"com.xx.controller","com.xx.xx"})})

但是经过实现很多次发现没用,原来项目包以外的bean一般是通过 通过spring SPI spring.factories的方法把Bean加载到另一个项目当中去。

spring.factories会创建一些jar中的定义的bean,比如强制格式化返回值

后来发现通过使用BeanDefinitionRegistryPostProcessor,直接在 解析完bean的注册信息后,直接移除就行,这样就不会创建bean。

BeanDefinitionRegistryPostProcessor继承BeanFactoryPostProcessor能够管理这些bean

实现代码示例

在项目中新建 RemoveRegistryBeanFactoryPostProcessor类,代码如下

import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;import org.springframework.stereotype.Component; @Componentpublic class RemoveRegistryBeanFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {     @Override    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {        String[] names = registry.getBeanDefinitionNames();        for (String name : names) {            if (name.contains("taskSendMessageListener") || name.contains("globalListener") || name.contains("executionSendMessageListener") || name.contains("processCallbackMesController")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.system.flow")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.system.modules.message")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.graphics.task")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.graphics.bimlight.location")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.graphics.bimlight.sectioning")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.graphics.modules")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.ubw.job")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.ubw.listener")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.ubw.msg")) {                registry.removeBeanDefinition(name);            }            if (name.contains("org.springblade.ubw.service")) {                registry.removeBeanDefinition(name);            }        }    }     @Override    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {    }}

当然还有部分自动配置类的代码需要删除bean注册,我们可以通过

@SpringBootApplication(exclude = {})的方式去实现,代码如下:@EnableAsync@EnableScheduling@SpringBootApplication(exclude = {DllInitLoader.class,ProcessEngineServicesAutoConfiguration.class})public class UnifyWorkFaceApplication {    public static void main (String[] args) {      BladeApplication.run("work-face", UnifyWorkFaceApplication.class, args);    }}

配置完毕,项目启动速度快了很多,也去除了很多jar依赖,还删除了很多无用表,比如flowable工作流的相关表,之前项目启动时老是自动去查询工作流的相关表,导致删除数据库的工作流的表项目就会启动不起来,现在通过

@SpringBootApplication(exclude = {ProcessEngineServicesAutoConfiguration.class}) 移除ProcessEngineServicesAutoConfiguration自动配置类代码,还有剔除,项目中引用flowable的项目类的注入,就可以正常启动了。

感谢各位的阅读,以上就是“SpringBoot怎么删除引用jar包中的无用bean”的内容了,经过本文的学习后,相信大家对SpringBoot怎么删除引用jar包中的无用bean这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯