亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

代碼示例

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

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

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

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

BeanDefinitionRegistryPostProcessor繼承BeanFactoryPostProcessor能夠管理這些bean

實(shí)現(xiàn)代碼示例

在項(xiàng)目中新建 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 {
    }
}

當(dāng)然還有部分自動(dòng)配置類的代碼需要?jiǎng)h除bean注冊(cè),我們可以通過

@SpringBootApplication(exclude = {})的方式去實(shí)現(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);
    }
}

配置完畢,項(xiàng)目啟動(dòng)速度快了很多,也去除了很多jar依賴,還刪除了很多無用表,比如flowable工作流的相關(guān)表,之前項(xiàng)目啟動(dòng)時(shí)老是自動(dòng)去查詢工作流的相關(guān)表,導(dǎo)致刪除數(shù)據(jù)庫(kù)的工作流的表項(xiàng)目就會(huì)啟動(dòng)不起來,現(xiàn)在通過

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

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

相關(guān)文章

  • Java分頁(yè)簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java分頁(yè)簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java分頁(yè)簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 深入分析java并發(fā)編程中volatile的實(shí)現(xiàn)原理

    深入分析java并發(fā)編程中volatile的實(shí)現(xiàn)原理

    這篇文章主要介紹了深入分析java并發(fā)編程中Volatile的實(shí)現(xiàn)原理,涉及Volatile的官方定義,實(shí)現(xiàn)原理,使用優(yōu)化等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MyBatis中的SQL映射文件如何配置參數(shù)映射和使用方法

    MyBatis中的SQL映射文件如何配置參數(shù)映射和使用方法

    MyBatis 是一種開源的 Java 持久化框架,它可以自動(dòng)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到 Java 對(duì)象中,并且使得 Java 對(duì)象可以非常方便地存儲(chǔ)到數(shù)據(jù)庫(kù)中,本文將介紹 MyBatis 中 SQL 映射文件的參數(shù)映射配置和使用方法,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合模板引擎過程代碼實(shí)例

    SpringBoot整合模板引擎過程代碼實(shí)例

    這篇文章主要介紹了SpringBoot整合模板引擎過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java實(shí)現(xiàn)水波紋擴(kuò)散效果

    java實(shí)現(xiàn)水波紋擴(kuò)散效果

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)水波紋擴(kuò)散效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • java動(dòng)態(tài)加載插件化編程詳解

    java動(dòng)態(tài)加載插件化編程詳解

    這篇文章主要介紹了java動(dòng)態(tài)加載插件化編程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 深入理解窗口令牌WindowToken

    深入理解窗口令牌WindowToken

    這篇文章主要介紹了窗口令牌WindowToken的概念與作用,它是對(duì)應(yīng)用組件的行為進(jìn)行規(guī)范管理的一個(gè)手段。WindowToken由應(yīng)用組件或其管理者負(fù)責(zé)向WMS聲明并持有
    2021-08-08
  • Java Netty HTTP服務(wù)實(shí)現(xiàn)過程解析

    Java Netty HTTP服務(wù)實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java Netty HTTP服務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    AC自動(dòng)機(jī)算法常被認(rèn)為是Trie樹+KMP算法的結(jié)合體,它是一個(gè)多模式匹配算法,在模式匹配領(lǐng)域被廣泛應(yīng)用。本文將詳細(xì)為大家介紹AC自動(dòng)機(jī)的原理與實(shí)現(xiàn)方法,感興趣的可以了解一下
    2022-12-12
  • springboot脫敏控件升級(jí)支持深度脫敏

    springboot脫敏控件升級(jí)支持深度脫敏

    這篇文章主要為大家介紹了springboot脫敏控件升級(jí)支持深度脫敏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論