亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么刪除引用jar包中的無用bean

發布時間:2022-06-23 14:09:46 來源:億速云 閱讀:195 作者:iii 欄目:開發技術

這篇文章主要講解了“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;
 
/**
 * @author liuya
 */
@Component
public 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這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五常市| 通山县| 东辽县| 东莞市| 莒南县| 黔西县| 东至县| 保定市| 鄱阳县| 阿克陶县| 开化县| 琼中| 五家渠市| 周宁县| 北宁市| 石林| 平果县| 大洼县| 武城县| 海口市| 托里县| 文安县| 阜平县| 长春市| 辉南县| 新河县| 称多县| 仁怀市| 崇州市| 邹城市| 金阳县| 夏津县| 海淀区| 镇巴县| 青岛市| 丹东市| 昭苏县| 安义县| 安顺市| 武夷山市| 金秀|