最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringBoot如何刪除引用jar包中的無用bean

 更新時間:2022年06月23日 09:22:44   作者:洛陽泰山  
為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,導(dǎo)致項目臃腫,啟動很慢。本文將用@ComponentScan注解去實現(xiàn)讓項目只加載自己需要的bean,需要的可以參考一下

前言

公司有個項目,時間比較趕,而且項目的部分需求,和之前做的項目部分功能一樣,為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,但是造成項目需要導(dǎo)入引入項目jar的相關(guān)依賴,導(dǎo)致項目臃腫,啟動很慢。有沒有辦法讓項目只加載自己需要的bean呢?

當然我們可以直接修改源代碼重新打包引入去解決,但是這個辦法太多麻煩。

通過百度的手段,查詢可以在springboot啟動類上用@ComponentScan注解去實現(xiàn)

代碼示例

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

但是經(jīng)過實現(xiàn)很多次發(fā)現(xiàn)沒用,原來項目包以外的bean一般是通過 通過spring SPI spring.factories的方法把Bean加載到另一個項目當中去。

spring.factories會創(chuàng)建一些jar中的定義的bean,比如強制格式化返回值

后來發(fā)現(xiàn)通過使用BeanDefinitionRegistryPostProcessor,直接在 解析完bean的注冊信息后,直接移除就行,這樣就不會創(chuàng)建bean。

BeanDefinitionRegistryPostProcessor繼承BeanFactoryPostProcessor能夠管理這些bean

實現(xiàn)代碼示例

在項目中新建 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 = {})的方式去實現(xiàn),代碼如下:
@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工作流的相關(guān)表,之前項目啟動時老是自動去查詢工作流的相關(guān)表,導(dǎo)致刪除數(shù)據(jù)庫的工作流的表項目就會啟動不起來,現(xiàn)在通過

@SpringBootApplication(exclude = {ProcessEngineServicesAutoConfiguration.class}) 移除ProcessEngineServicesAutoConfiguration自動配置類代碼,還有剔除,項目中引用flowable的項目類的注入,就可以正常啟動了。

以上就是詳解SpringBoot如何刪除引用jar包中的無用bean的詳細內(nèi)容,更多關(guān)于SpringBoot刪除無用bean的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • myBatis組件教程之緩存的實現(xiàn)與使用

    myBatis組件教程之緩存的實現(xiàn)與使用

    這篇文章主要給大家介紹了關(guān)于myBatis組件教程之緩存的實現(xiàn)與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-11-11
  • Java中BigInteger用法小結(jié)

    Java中BigInteger用法小結(jié)

    這篇文章主要介紹了Java中BigInteger用法的詳解,在這里,我們詳細描述下BigInteger的用法,在使用之前,我們需要導(dǎo)入java.math.*包,本文通過實例代碼相結(jié)合給大家詳細講解,需要的朋友可以參考下
    2023-03-03
  • SpringBoot @Autowired注解注入規(guī)則介紹

    SpringBoot @Autowired注解注入規(guī)則介紹

    這篇文章主要介紹了SpringBoot @Autowired注解注入規(guī)則介紹,具有很好的參考價值,希望對大家有所幫助。
    2021-11-11
  • java及C++中傳值傳遞、引用傳遞和指針方式的理解

    java及C++中傳值傳遞、引用傳遞和指針方式的理解

    為什么 Java 只有值傳遞,但 C++ 既有值傳遞,又有引用傳遞呢?今天我們就來探討下這個問題,有需要的朋友可以參考下
    2014-09-09
  • MyBatis-Plus之邏輯刪除的實現(xiàn)

    MyBatis-Plus之邏輯刪除的實現(xiàn)

    這篇文章主要介紹了MyBatis-Plus之邏輯刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-11-11
  • 關(guān)于String轉(zhuǎn)Json的幾種方式

    關(guān)于String轉(zhuǎn)Json的幾種方式

    這篇文章主要介紹了關(guān)于String轉(zhuǎn)Json的幾種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • JAVA設(shè)置手動提交事務(wù),回滾事務(wù),提交事務(wù)的操作

    JAVA設(shè)置手動提交事務(wù),回滾事務(wù),提交事務(wù)的操作

    這篇文章主要介紹了JAVA設(shè)置手動提交事務(wù),回滾事務(wù),提交事務(wù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 多用多學(xué)之Java中的Set,List,Map詳解

    多用多學(xué)之Java中的Set,List,Map詳解

    下面小編就為大家?guī)硪黄嘤枚鄬W(xué)之Java中的Set,List,Map詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • springboot配置mongodb連接池的方法步驟

    springboot配置mongodb連接池的方法步驟

    這篇文章主要介紹了springboot配置mongodb連接池的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-01-01
  • java結(jié)束進程的實例代碼

    java結(jié)束進程的實例代碼

    java結(jié)束程序進程的方法很簡單,只要一句代碼就行,大家參考使用吧
    2013-12-12

最新評論

赤水市| 永春县| 东乡县| 南江县| 天峻县| 建阳市| 正蓝旗| 阳春市| 怀远县| 长泰县| 上杭县| 全州县| 隆昌县| 镇雄县| 鸡东县| 三河市| 金坛市| 镇坪县| 潮安县| 锡林浩特市| 太康县| 天峨县| 繁昌县| 镇平县| 肥东县| 吉木乃县| 特克斯县| 通化县| 甘泉县| 浙江省| 垫江县| 铁岭市| 马关县| 高邑县| 莱西市| 大姚县| 嘉祥县| 自贡市| 积石山| 富锦市| 文安县|