Heim > Java > javaLernprogramm > Wie löscht SpringBoot unnötige Beans in referenzierten JAR-Paketen?

Wie löscht SpringBoot unnötige Beans in referenzierten JAR-Paketen?

王林
Freigeben: 2023-05-14 20:07:09
nach vorne
2181 Leute haben es durchsucht

Vorwort

Das Unternehmen hat ein Projekt, die Zeit ist relativ knapp und einige der Projektanforderungen stimmen mit einigen Funktionen früherer Projekte überein Integrieren Sie direkt das vorherige Maven-Projekt mit mehreren Modulen. Einige der Module werden direkt in Form von JAR-Paketen in neue Projekte eingeführt. Dies spart zwar viel Entwicklungszeit, führt jedoch auch dazu, dass das Projekt die zugehörigen Abhängigkeiten importieren muss jar, was dazu führt, dass das Projekt aufgebläht wird und langsam startet. Gibt es eine Möglichkeit, dafür zu sorgen, dass das Projekt nur die benötigten Beans lädt?

Natürlich können wir den Quellcode direkt ändern und neu verpacken, um das Problem zu lösen, aber diese Methode ist zu mühsam.

Durch die Baidu-Methode kann die Abfrage mithilfe der @ComponentScan-Annotation in der Springboot-Startup-Klasse implementiert werden Ich habe es oft implementiert und fand es nutzlos. Es stellte sich heraus, dass Beans außerhalb des Projektpakets normalerweise über die Spring-SPI-Methode spring.factories in ein anderes Projekt geladen werden.

spring.factories erstellt einige im JAR definierte Beans, z. B. das Erzwingen formatierter Rückgabewerte

Später habe ich das mithilfe von BeanDefinitionRegistryPostProcessor direkt nach dem Parsen der Registrierungsinformationen festgestellt Entfernen Sie die Bean einfach direkt, damit die Bean nicht erstellt wird.

BeanDefinitionRegistryPostProcessor erbt BeanFactoryPostProcessor, um diese Beans zu verwalten

Implementierungscodebeispiel

Erstellen Sie eine neue RemoveRegistryBeanFactoryPostProcessor-Klasse im Projekt. Der Code lautet wie folgt# 🎜 🎜 #

@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,
        pattern = {"com.xx.controller","com.xx.xx"})})
Nach dem Login kopieren
#🎜 🎜# Natürlich gibt es einige automatische Konfigurationscodes, die gelöscht werden müssen. Wir können die Konfiguration über

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 {
    }
}
Nach dem Login kopieren

abschließen. Die Projektstartgeschwindigkeit ist viel schneller, viele JAR-Abhängigkeiten haben wurden entfernt und viele nutzlose Tabellen, z. B. Tabellen im Zusammenhang mit Flowable-Workflows, wurden beim Starten des Projekts automatisch abgefragt Dadurch wurde die Datenbank nicht gestartet. Durch

entfernt @SpringBootApplication(exclude = {ProcessEngineServicesAutoConfiguration.class}) den automatischen Konfigurationsklassencode von ProcessEngineServicesAutoConfiguration und eliminiert die Injektion von Projektklassen, die auf Flowable verweisen das Projekt, und es kann normal starten.

Das obige ist der detaillierte Inhalt vonWie löscht SpringBoot unnötige Beans in referenzierten JAR-Paketen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage