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.
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"})})
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 { } }
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!