我们在用context获取bean的时候,其实底层都是操作的DefaultListableBeanFactory这个类。这个类中主要分为两块:

  1. 注册bean:解析class,封装为beanDefinition对象;
  2. 从beanDefinition中实例化对象。

先看下是如何保存数据的。

beanDefinition对象

DefaultListableBeanFactory中的属性:

	// key:bean的名称// value:BeanDefinition对象private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);//通过类型保存key:类型,value:bean的名称private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);// 这里只保存了单例的private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<>(64);// 所有bean的名称private volatile List<String> beanDefinitionNames = new ArrayList<>(256);// 手动添加的bean的名称// 为什么有手动添加的呢?因为我们可以操作context,添加自己的BeanDefinition,这就是手动添加的,会加入到这个set中。private volatile Set<String> manualSingletonNames = new LinkedHashSet<>(16);

实例对象

从DefaultListableBeanFactory一直找父类,会找到DefaultSingletonBeanRegistry

	//bean名称  bean实例private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);//保存的是ObjectFactory的类private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);//早期暴露的bean,用于解决循环依赖private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);// 实例的名称。private final Set<String> registeredSingletons = new LinkedHashSet<>(256);

知道了在哪里保存数据,那么就开始看从哪里开始解析类,并封装为beandefinitions类。由于spring支持配置文件和注解。所以分别看下是如何注册bean的。

ClassPathXmlApplicationContext 解析配置文件注册bean

我们在使用的时候通常都是这样创建的:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

传入spring的配置文件,通过解析里面的配置,注册到容器中。

	public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)throws BeansException {super(parent);// 设置配置文件的路径setConfigLocations(configLocations);if (refresh) {// 调用刷新方法。refresh();}}

刷新方法在org.springframework.context.support.AbstractApplicationContext#refresh(),这里面有众多的方法。xml的解析在obtainFreshBeanFactory方法中

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

	protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {// 刷新工厂,并将工厂返回refreshBeanFactory();return getBeanFactory();}

org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory

	protected final void refreshBeanFactory() throws BeansException {// 如果已经有了,就销毁,重新创建。if (hasBeanFactory()) {destroyBeans();closeBeanFactory();}try {// 实例化工厂,就是创建DefaultListableBeanFactory对象DefaultListableBeanFactory beanFactory = createBeanFactory();beanFactory.setSerializationId(getId());customizeBeanFactory(beanFactory);// 将配置文件中的配置,注册到beanFactory中。loadBeanDefinitions(beanFactory);synchronized (this.beanFactoryMonitor) {this.beanFactory = beanFactory;}}catch (IOException ex) {throw new ApplicationContextException("I/O error parsing bean definition source for " + getDisplayName(), ex);}}

org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)

	protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {Resource[] configResources = getConfigResources();if (configResources != null) {reader.loadBeanDefinitions(configResources);}String[] configLocations = getConfigLocations();if (configLocations != null) {reader.loadBeanDefinitions(configLocations);}}

XmlBeanDefinitionReader实例化的时候已经将beanFactory放进入了,现在传入配置文件的路径。

继续深入,找到方法:

org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#parseBeanDefinitions

	protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {if (delegate.isDefaultNamespace(root)) {NodeList nl = root.getChildNodes();for (int i = 0; i < nl.getLength(); i++) {Node node = nl.item(i);if (node instanceof Element) {Element ele = (Element) node;if (delegate.isDefaultNamespace(ele)) {parseDefaultElement(ele, delegate);}else {delegate.parseCustomElement(ele);}}}}else {delegate.parseCustomElement(root);}}

通过命名空间,解析标签。就行,,在不同的命名空间下
先看本命名空间下的:

	private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {// import标签,导入其他的配置文件。if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {importBeanDefinitionResource(ele);}// 别名标签else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {processAliasRegistration(ele);}// bean标签else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {processBeanDefinition(ele, delegate);}//beans标签else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {// recursedoRegisterBeanDefinitions(ele);}}

importBeanDefinitionResource:用来解析import标签的。import标签就是用来引入其他的配置文件的;内部逻辑是得到location数据,接续用XmlBeanDefinitionReader解析这个路径。其实就是解析配置问价的逻辑

processAliasRegistration:解析alias标签,将别名解析出来,key:bean名称,value是别名,放入到别名的map中。

processBeanDefinition:解析bean标签。bean标签中的数据会直接对应beandenition中的属性。property标签会解析为PropertyValue,添加到bf的属性集合中。构造函数也是类似的逻辑。

doRegisterBeanDefinitions:解析beans标签,就是递归了,还是调用同样的逻辑,现在解析的就是beans标签内的内容。


看下其他命名空间的解析:

解析对应的标签。
org.springframework.beans.factory.xml.NamespaceHandlerSupport#parse

	public BeanDefinition parse(Element element, ParserContext parserContext) {BeanDefinitionParser parser = findParserForElement(element, parserContext);return (parser != null ? parser.parse(element, parserContext) : null);}

这里开始不同的命名空间,使用不同的解析器了
在这里插入图片描述
看名字就知道对应那些标签了:

AnnotationConfigBeanDefinitionParser

代码就补贴了,直接说做了那些事情。注册了一些bean,这些bean是做什么的呢?
ConfigurationClassPostProcessor:用来解析配置类(@configuration)的

AutowiredAnnotationBeanPostProcessor: @Autowired依赖注入的处理器

CommonAnnotationBeanPostProcessor:@resource依赖注入的处理器

EventListenerMethodProcessor
DefaultEventListenerFactory
后面这两也给注入了,我还没看。

AnnotationDrivenBeanDefinitionParser

也是注册了2个bean:这两个好分析,就是创建一个代理,将代理的的方法放在一个线程中执行。

AsyncAnnotationBeanPostProcessor
ScheduledAnnotationBeanPostProcessor

AnnotationDrivenCacheBeanDefinitionParser

看名字是spring的Cache有关,依旧是注册的和其相关的处理器类。
有两个方式,一种是切面,一种是代理。切面的没了解过,代理是注册了InfrastructureAdvisorAutoProxyCreator类,他是专门解析spring内部的切面的,啥是spring内部的呢?Role() == BeanDefinition.ROLE_INFRASTRUCTURE

AspectJAutoProxyBeanDefinitionParser

一看就是和aop相关的,注册是处理器是AnnotationAwareAspectJAutoProxyCreator

ComponentScanBeanDefinitionParser

扫描包的处理器:

	public BeanDefinition parse(Element element, ParserContext parserContext) {String basePackage = element.getAttribute(BASE_PACKAGE_ATTRIBUTE);basePackage = parserContext.getReaderContext().getEnvironment().resolvePlaceholders(basePackage);String[] basePackages = StringUtils.tokenizeToStringArray(basePackage,ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);// 解析包名的处理器ClassPathBeanDefinitionScanner scanner = configureScanner(parserContext, element);Set<BeanDefinitionHolder> beanDefinitions = scanner.doScan(basePackages);registerComponents(parserContext.getReaderContext(), beanDefinitions, element);return null;}

注意:ClassPathBeanDefinitionScanner 的doScan方法就已经经扫描到的bean注册了。registerComponents方法包含了上面AnnotationConfigBeanDefinitionParser的功能。

还有一些其他的解析器。就自行分析吧。


ClassPathXmlApplicationContext 的注册bean就已经分析完了:除了bean标签是真正的注册bean,其他的标签都是注册的功能的处理器。

下面看下注解的容器是如何注册bean的,思考下:ClassPathXmlApplicationContext 是通过解析标签是注册处理器,那么在AnnotationConfigApplicationContext中一定是用注解来实现注册处理器。

那普通bean怎么注册呢?猜测一下,应该是扫描的注解。

ClassPathXmlApplicationContext 是给一个配置文件。解析文件。
AnnotationConfigApplicationContext:给一个有配置注解的类。解析类中的注解。

AnnotationConfigApplicationContext解析配置类

ClassPathXmlApplicationContext 的参数是配置文件路径;可以传多个路径,或者在一个总的文件问价中import标签引入其他的配置文件;

AnnotationConfigApplicationContext则需要传进配置类;同样可以传进来多个;但通常只会传主的配置类。之后主配置类中注解:@compoentscan;扫描bean和配置类。再进行解析。

	public AnnotationConfigApplicationContext(Class<?>... componentClasses) {// 调用自身的构造器this();// 将主配置类注册register(componentClasses);// 刷新方法refresh();}//无参构造器创建了两个对象。public AnnotationConfigApplicationContext() {// 读取注解的处理器this.reader = new AnnotatedBeanDefinitionReader(this);// 用来扫描bean的处理器this.scanner = new ClassPathBeanDefinitionScanner(this);}

创建AnnotatedBeanDefinitionReader对象时,注册了几个bean,是AnnotationConfigBeanDefinitionParser功能中注册的那几bean;注意:ConfigurationClassPostProcessor这个bean就是用来解析配置类的。

创建ClassPathBeanDefinitionScanner时,只是配置了扫描的条件。

再了解注解类型的容器是如何解析类并封装为beanDefinition的,先看下这篇文章:
【Spring-IOC】通过BeanFactoryPostProcessor实现BeanFactory的定制化

上面的基础上,看下这个类:ConfigurationClassPostProcessor,没有就是AnnotatedBeanDefinitionReader给注册的。

public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPostProcessor,PriorityOrdered, ResourceLoaderAware, BeanClassLoaderAware, EnvironmentAware

实现了BeanDefinitionRegistryPostProcessor,有实现了PriorityOrdered。知道哪里调用这个类了吧。

直接看postProcessBeanDefinitionRegistry方法。

	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {int registryId = System.identityHashCode(registry);if (this.registriesPostProcessed.contains(registryId)) {throw new IllegalStateException("postProcessBeanDefinitionRegistry already called on this post-processor against " + registry);}if (this.factoriesPostProcessed.contains(registryId)) {throw new IllegalStateException("postProcessBeanFactory already called on this post-processor against " + registry);}// 避免重复解析this.registriesPostProcessed.add(registryId);processConfigBeanDefinitions(registry);}
	public void processConfigBeanDefinitions(BeanDefinitionRegistry registry) {List<BeanDefinitionHolder> configCandidates = new ArrayList<>();// 找出所有注册的bean名称String[] candidateNames = registry.getBeanDefinitionNames();for (String beanName : candidateNames) {BeanDefinition beanDef = registry.getBeanDefinition(beanName);if (beanDef.getAttribute(ConfigurationClassUtils.CONFIGURATION_CLASS_ATTRIBUTE) != null) {if (logger.isDebugEnabled()) {logger.debug("Bean definition has already been processed as a configuration class: " + beanDef);}}// 如果是用@configuration注解注释的,添加集合else if (ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef, this.metadataReaderFactory)) {configCandidates.add(new BeanDefinitionHolder(beanDef, beanName));}}// Return immediately if no @Configuration classes were foundif (configCandidates.isEmpty()) {return;}// Sort by previously determined @Order value, if applicableconfigCandidates.sort((bd1, bd2) -> {int i1 = ConfigurationClassUtils.getOrder(bd1.getBeanDefinition());int i2 = ConfigurationClassUtils.getOrder(bd2.getBeanDefinition());return Integer.compare(i1, i2);});// Detect any custom bean name generation strategy supplied through the enclosing application contextSingletonBeanRegistry sbr = null;if (registry instanceof SingletonBeanRegistry) {sbr = (SingletonBeanRegistry) registry;if (!this.localBeanNameGeneratorSet) {BeanNameGenerator generator = (BeanNameGenerator) sbr.getSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR);if (generator != null) {this.componentScanBeanNameGenerator = generator;this.importBeanNameGenerator = generator;}}}if (this.environment == null) {this.environment = new StandardEnvironment();}// 创建@Configuration类解析器ConfigurationClassParser parser = new ConfigurationClassParser(this.metadataReaderFactory, this.problemReporter, this.environment,this.resourceLoader, this.componentScanBeanNameGenerator, registry);Set<BeanDefinitionHolder> candidates = new LinkedHashSet<>(configCandidates);Set<ConfigurationClass> alreadyParsed = new HashSet<>(configCandidates.size());do {// 解析当前候选的配置类。parser.parse(candidates);parser.validate();// 剩下的代码:先分析parser.parse(candidates);。。。。}

跳过了一些方法,直接看这个:

	protected final void parse(@Nullable String className, String beanName) throws IOException {Assert.notNull(className, "No bean class name for configuration class bean definition");MetadataReader reader = this.metadataReaderFactory.getMetadataReader(className);processConfigurationClass(new ConfigurationClass(reader, beanName));}

每个配置类对应一个ConfigurationClass;


真正的解析配置类:

	protected final SourceClass doProcessConfigurationClass(ConfigurationClass configClass, SourceClass sourceClass)throws IOException {// 配置类,必然是Component注解标注的。// 这个方法是解析内部类的,如果内部类用@configuration注解标注了,会先解析内部类的。if (configClass.getMetadata().isAnnotated(Component.class.getName())) {processMemberClasses(configClass, sourceClass);}// @PropertySource 解析这个注解的逻辑也很简单,就是将property文件解析出来,键值对放入到环境中。for (AnnotationAttributes propertySource : AnnotationConfigUtils.attributesForRepeatable(sourceClass.getMetadata(), PropertySources.class,org.springframework.context.annotation.PropertySource.class)) {if (this.environment instanceof ConfigurableEnvironment) {processPropertySource(propertySource);}else {logger.info("Ignoring @PropertySource annotation on [" + sourceClass.getMetadata().getClassName() +"]. Reason: Environment must implement ConfigurableEnvironment");}}// 解析@ComponentScan注解// 根据报名,扫描包,直接注入bean,返回beanDefinition集合。// 从中筛选。如果是配置类的,还要解析这个配置类。Set<AnnotationAttributes> componentScans = AnnotationConfigUtils.attributesForRepeatable(sourceClass.getMetadata(), ComponentScans.class, ComponentScan.class);if (!componentScans.isEmpty() &&!this.conditionEvaluator.shouldSkip(sourceClass.getMetadata(), ConfigurationPhase.REGISTER_BEAN)) {for (AnnotationAttributes componentScan : componentScans) {// The config class is annotated with @ComponentScan -> perform the scan immediatelySet<BeanDefinitionHolder> scannedBeanDefinitions =this.componentScanParser.parse(componentScan, sourceClass.getMetadata().getClassName());// Check the set of scanned definitions for any further config classes and parse recursively if neededfor (BeanDefinitionHolder holder : scannedBeanDefinitions) {BeanDefinition bdCand = holder.getBeanDefinition().getOriginatingBeanDefinition();if (bdCand == null) {bdCand = holder.getBeanDefinition();}// 如果扫描出来的是配置类,进入解析的逻辑。if (ConfigurationClassUtils.checkConfigurationClassCandidate(bdCand, this.metadataReaderFactory)) {parse(bdCand.getBeanClassName(), holder.getBeanName());}}}}// @Import 导入配置类。对标的是xml中的import标签。// getImports(sourceClass)是得到import注解设置的类。processImports(configClass, sourceClass, getImports(sourceClass), true);// Process any @ImportResource annotationsAnnotationAttributes importResource =AnnotationConfigUtils.attributesFor(sourceClass.getMetadata(), ImportResource.class);if (importResource != null) {String[] resources = importResource.getStringArray("locations");Class<? extends BeanDefinitionReader> readerClass = importResource.getClass("reader");for (String resource : resources) {String resolvedResource = this.environment.resolveRequiredPlaceholders(resource);configClass.addImportedResource(resolvedResource, readerClass);}}// 解析@Bean注解:找到所有方法,添加到configClass属性中。Set<MethodMetadata> beanMethods = retrieveBeanMethodMetadata(sourceClass);for (MethodMetadata methodMetadata : beanMethods) {configClass.addBeanMethod(new BeanMethod(methodMetadata, configClass));}// Process default methods on interfacesprocessInterfaces(configClass, sourceClass);// Process superclass, if anyif (sourceClass.getMetadata().hasSuperClass()) {String superclass = sourceClass.getMetadata().getSuperClassName();if (superclass != null && !superclass.startsWith("java") &&!this.knownSuperclasses.containsKey(superclass)) {this.knownSuperclasses.put(superclass, configClass);// Superclass found, return its annotation metadata and recursereturn sourceClass.getSuperClass();}}// No superclass -> processing is completereturn null;}

注意,这里只是将解析,之后添加到configClass的属性中,并没有封装为bd.

解析内部类

	private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass) throws IOException {// 得到内部类集合Collection<SourceClass> memberClasses = sourceClass.getMemberClasses();if (!memberClasses.isEmpty()) {List<SourceClass> candidates = new ArrayList<>(memberClasses.size());for (SourceClass memberClass : memberClasses) {// 如果内部类使用@configuration注解标注,添加到集合。if (ConfigurationClassUtils.isConfigurationCandidate(memberClass.getMetadata()) &&!memberClass.getMetadata().getClassName().equals(configClass.getMetadata().getClassName())) {candidates.add(memberClass);}}OrderComparator.sort(candidates);// 遍历集合。解析内部配置类:for (SourceClass candidate : candidates) {if (this.importStack.contains(configClass)) {this.problemReporter.error(new CircularImportProblem(configClass, this.importStack));}else {this.importStack.push(configClass);try {// 这里传进来的是内部类的classprocessConfigurationClass(candidate.asConfigClass(configClass));}finally {this.importStack.pop();}}}}}

解析import注解

先给出基础只是:
import是导入的配置配置类;
如果import注解中标注的类是ImportSelector类型,该类的selectImports方法返回的才是导入的配置类,而并非该类。

如果标注的类是ImportBeanDefinitionRegistrar,那么会给传入注册中心。自己注册。

如果是普通类型的,那么该类才是真正的配置类。

	private void processImports(ConfigurationClass configClass, SourceClass currentSourceClass,Collection<SourceClass> importCandidates, boolean checkForCircularImports) {// Collection<SourceClass> importCandidates是import注解中标注的类if (importCandidates.isEmpty()) {return;}if (checkForCircularImports && isChainedImportOnStack(configClass)) {this.problemReporter.error(new CircularImportProblem(configClass, this.importStack));}else {this.importStack.push(configClass);try {// 遍历这些类。for (SourceClass candidate : importCandidates) {// 如果是ImportSelector类型,if (candidate.isAssignable(ImportSelector.class)) {// Candidate class is an ImportSelector -> delegate to it to determine importsClass<?> candidateClass = candidate.loadClass();ImportSelector selector = ParserStrategyUtils.instantiateClass(candidateClass, ImportSelector.class,this.environment, this.resourceLoader, this.registry);if (selector instanceof DeferredImportSelector) {this.deferredImportSelectorHandler.handle(configClass, (DeferredImportSelector) selector);}else {// 这里看到了吗?得到selectImports方法的返回值,再次调用来的本方法processImports,进行解析,知道找到普通的类或者ImportBeanDefinitionRegistrar类。String[] importClassNames = selector.selectImports(currentSourceClass.getMetadata());Collection<SourceClass> importSourceClasses = asSourceClasses(importClassNames);processImports(configClass, currentSourceClass, importSourceClasses, false);}}else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) {// Candidate class is an ImportBeanDefinitionRegistrar ->// ImportBeanDefinitionRegistrar类型的会实例化,之后添加到configClass的属性中。Class<?> candidateClass = candidate.loadClass();ImportBeanDefinitionRegistrar registrar =ParserStrategyUtils.instantiateClass(candidateClass, ImportBeanDefinitionRegistrar.class,this.environment, this.resourceLoader, this.registry);configClass.addImportBeanDefinitionRegistrar(registrar, currentSourceClass.getMetadata());}else {// 如果是普通的bean,那么它是以得配置类。放入configClass的属性中,通知再次解析配置类。调用processConfigurationClass方法。this.importStack.registerImport(currentSourceClass.getMetadata(), candidate.getMetadata().getClassName());processConfigurationClass(candidate.asConfigClass(configClass));}}}catch (BeanDefinitionStoreException ex) {throw ex;}catch (Throwable ex) {throw new BeanDefinitionStoreException("Failed to process import candidates for configuration class [" +configClass.getMetadata().getClassName() + "]", ex);}finally {this.importStack.pop();}}}

import注解是十分复杂的,还需要反复思考:
可以这样理解:ImportSelector是批量导入的类的。ImportBeanDefinitionRegistrar是手动添加beanDefinition的,普通的才是真正的配置类。

梳理下解析有哪块生成了新的ConfigurationClass。

  1. 内部类的
  2. 包扫描的,如果是配置类,会生成新的。
  3. import注解,普通的,会生成新的。

注意生成新的就是要对该类进行再一步的解析。所以的ConfigurationClass都缓存到了ConfigurationClassParser 中。

下面看下processConfigBeanDefinitions剩下的方法:

		do {parser.parse(candidates);parser.validate();// 这里得到所有的配置类。Set<ConfigurationClass> configClasses = new LinkedHashSet<>(parser.getConfigurationClasses());configClasses.removeAll(alreadyParsed);// Read the model and create bean definitions based on its contentif (this.reader == null) {this.reader = new ConfigurationClassBeanDefinitionReader(registry, this.sourceExtractor, this.resourceLoader, this.environment,this.importBeanNameGenerator, parser.getImportRegistry());}// 将配置类封装为bdthis.reader.loadBeanDefinitions(configClasses);alreadyParsed.addAll(configClasses);candidates.clear();if (registry.getBeanDefinitionCount() > candidateNames.length) {String[] newCandidateNames = registry.getBeanDefinitionNames();Set<String> oldCandidateNames = new HashSet<>(Arrays.asList(candidateNames));Set<String> alreadyParsedClasses = new HashSet<>();for (ConfigurationClass configurationClass : alreadyParsed) {alreadyParsedClasses.add(configurationClass.getMetadata().getClassName());}for (String candidateName : newCandidateNames) {if (!oldCandidateNames.contains(candidateName)) {BeanDefinition bd = registry.getBeanDefinition(candidateName);if (ConfigurationClassUtils.checkConfigurationClassCandidate(bd, this.metadataReaderFactory) &&!alreadyParsedClasses.contains(bd.getBeanClassName())) {candidates.add(new BeanDefinitionHolder(bd, candidateName));}}}candidateNames = newCandidateNames;}}while (!candidates.isEmpty());

之所以使用while循环。是判断是否有新的配置类生成,有点话就要再次解析。


封装为beanDefinition

	private void loadBeanDefinitionsForConfigurationClass(ConfigurationClass configClass, TrackedConditionEvaluator trackedConditionEvaluator) {if (trackedConditionEvaluator.shouldSkip(configClass)) {String beanName = configClass.getBeanName();if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) {this.registry.removeBeanDefinition(beanName);}this.importRegistry.removeImportingClass(configClass.getMetadata().getClassName());return;}// 就是import的普通类。// 解析了几个注解:@lazy,@dependon,@primary等if (configClass.isImported()) {registerBeanDefinitionForImportedConfigurationClass(configClass);}// bean方法,主要是@bean注解中属性的封装为bd中的属性。// 该方法设置为工厂方法for (BeanMethod beanMethod : configClass.getBeanMethods()) {loadBeanDefinitionsForBeanMethod(beanMethod);}// 引入配置文件,xmlBeanDefinitionreader解析这个配置文件loadBeanDefinitionsFromImportedResources(configClass.getImportedResources());//这个是import中是importBeanDefinitionRegistrar类型。调用方法。手动注册。loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());}

到此位置,bean的解析已经完成。。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 数位DP练习

    数位DP度的数量数字游戏Windy数数字游戏2不要62度的数量 题目链接&#xff1a;度的数量 分析&#xff1a;其实感觉数位DP这类题还是有点章法的&#xff0c;对于求a~b中满足一个条件的数的个数&#xff0c;我们可以转化为求0/1 ~b中满足的个数和0/1 ~a-1中满足的个数&#xff0…...

    2024/4/16 21:37:40
  2. 【Go语言6-1】学习Go语言必须了解的五种导入包的方式以及作用

    包(package)是Go语言中实现代码复用的重要手段。包的存在可以让我们只关心包中的有用的函数。 Go语言自带100多个标准包&#xff0c;这些包使Go语言用起来便捷&#xff0c;进行服务器端、Web端编程几乎不需要第三方框架就可以开发。 可依据函数、接口、方法之间的关联性来对包…...

    2024/4/13 14:14:21
  3. 基于珊格地图的人工势场法 动态路径规划 路径规划算法 地图好修改

    基于珊格地图的人工势场法 动态路径规划 路径规划算法 地图好修改 自己研究编写的Matlab路径规划 可自行设置起始点&#xff0c;目标点&#xff0c;自由更换地图。 ——————————————————— 可以和A*和RRT融合 动态障碍物 预先声明&#xff1a;该程序为版权所述…...

    2024/4/15 12:50:51
  4. 动态规划入门——线性DP

    文章目录线性DP最短编辑距离编辑距离线性DP 最短编辑距离 【题目链接】902. 最短编辑距离 - AcWing题库 思路&#xff1a; 有三个操作&#xff0c;因此有三个子集&#xff01; 状态表示 dp[i][j] 集合 &#xff1a; 所有吧a中的前i个字母 变成 b中前j个字母的集合的操作集合属…...

    2024/4/25 18:23:07
  5. 基于FPGA的汽车尾灯设计,包括功能仿真和说明,可以提供相关设计资料

    基于FPGA的汽车尾灯设计&#xff0c;包括功能仿真和说明&#xff0c;可以提供相关设计资料 编号:3250647170866201l***4...

    2024/4/13 14:14:26
  6. imagegick使用

    convert是在Windows中的文件系统修改命令&#xff0c;Convert将文件分配表 (FAT) 和 FAT32 卷转换为 NTFS 文件系统&#xff0c;而现有的文件和文件夹完好无损。 百度百科 因此直接在windows里cmd命令行输入convert是不行的。 我遇到这样的报错&#xff1a; magick: FailedToE…...

    2024/4/13 14:14:16
  7. SKLEARN实例:【随机森林在乳腺癌数据上的调参】

    目录步骤1.导入需要的库2. 导入数据集&#xff0c;探索数据3. 进行一次简单的建模&#xff0c;看看模型本身在数据集上的效果4. 随机森林调整的第一步&#xff1a;无论如何先来调n_estimators5. 在确定好的范围内&#xff0c;进一步细化学习曲线6.利用网格搜索&#xff0c;按照…...

    2024/4/20 17:14:40
  8. Java笔记(四)

    this关键字 对象创建的过程和this的本质 构造方法是创建Java对象的重要途径&#xff0c;通过new关键字调用构造器时&#xff0c;构造器也确实返回该类的对象&#xff0c;但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四步&#xff1a; 分配对象空间&#xff0c;…...

    2024/4/18 16:12:15
  9. 安全云盘项目(一):1.3 基于event监控客户端获取连接

    实现上面逻辑的代码&#xff1a;...

    2024/4/18 16:38:16
  10. 初一寒假集训第一期总结

    目录快速排序图解模板代码例子归并排序图解模板代码例子二分查找模板代码例子间接二分例子分治思考题队列利用数组模拟手写例子STL 封装函数定义使用函数例子补充优先队列定义函数栈利用数组模拟手写例子STL封装函数定义函数例子end快速排序 图解 先找到左哨兵作为基准数&…...

    2024/4/7 21:21:57
  11. 线程池实现C++版本

    学习了c&#xff0c;把线程池改成c试试 开始 C版本的线程池是根据C语言版本修改来的&#xff0c;为了熟悉一下C的相关语法&#xff0c;所以就有了这篇笔记。记录一下修改的过程中遇到的问题。 本线程池应该是基于对象的&#xff0c;并不是面向对象。 [线程池简单实现(基于C…...

    2024/4/13 14:14:16
  12. python入门题目四(ZZULIOJ函数和结构体练习)

    个人练习函数1092: 素数表(函数专题&#xff09;1096: 水仙花数&#xff08;函数专题&#xff09;1104: 求因子和&#xff08;函数专题&#xff09;结构体1182: 查询记录&#xff08;结构体专题&#xff09;1180: 成绩统计&#xff08;结构体专题&#xff09;函数 1092: 素数表…...

    2024/4/15 22:00:44
  13. 重置Java环境--20220206

    计算机右键->属性->高级系统设置->环境变量->在系统变量里设置&#xff1a; Java 1、新建 变量名&#xff1a;JAVA_HOME 变量值&#xff1a;D:\Program Files\Java\jdk1.8.0_212 2、编辑Path 变量值最前加&#xff1a;%JAVA_HOME%\bin; 3、检验是否配置成功 快捷…...

    2024/4/15 18:49:31
  14. 三维数字化套件使用介绍之五:矢量建模(3)

    三维数字化套件主要功能 三维数字化套件是一款集二维、三维数据转化、影像下载及加工处理、二维坐标变换、静态服务器为一体的数字化套件。具体功能可以访问 http://www.dascad.net 矢量建模 矢量建模是该数字化套件的主要功能&#xff0c;该功能包括 生成建筑、生成道路、生成…...

    2024/4/13 14:14:16
  15. windows下kafka运行报错:consumer_offsets-22\00000000000000000000.index.swap:另一个程序正在使用此文件,进程无法访问。

    原因 windows上的kafka不太稳定用一段时间后会出现这个问题。 解决 删除下列文件夹下的内容&#xff0c;但是文件夹别删除...

    2024/4/5 2:51:02
  16. 移动零

    这题运用了双指针算法&#xff0c; 定义两个指针i&#xff0c;j&#xff0c;两个都指向起点&#xff0c;遍历整个数组如果不等于0就把i上的值赋给j&#xff0c;j 然后补齐最后面的0 class Solution { public:void moveZeroes(vector<int>& nums) {int k0;for(auto…...

    2024/4/13 14:14:41
  17. ubuntu 18.04/linux 使用华为随身wifi mini 2 (E8372)(华为其他应该也适用)2022.2.6

    ifconfig -a 能看到 eth1 ifconfig eth1 up 开启网卡 ifconfig 查看 使用智慧生活app查看...

    2024/4/13 14:14:31
  18. 反步控制,backstepping控制算法跟随的椭圆轨迹曲线,matlab程序

    反步控制&#xff0c;backstepping控制算法跟随的椭圆轨迹曲线&#xff0c;matlab程序 编号:8439.99646926226125StartRelax...

    2024/4/13 14:14:21
  19. 维纶触摸屏配方程序

    维纶触摸屏配方程序&#xff0c;供新手参考学习使用。 请使用威纶通EBPRO最新版打开 编号:759.90646760091427尽收网下...

    2024/4/13 14:14:16
  20. 糖果传递(数学)

    这道题本质上是一个数学题&#xff0c;先设xi为最优情况下第i个小朋友给第i-1个小朋友的糖果数(xi为负数代表是第i-1个小朋友给了第i个小朋友糖果)&#xff0c;特殊情况&#xff1a;当i为1时&#xff0c;默认i-1n&#xff0c;也就是x1表示第1个小朋友给第n个小朋友的糖果数。那…...

    2024/4/19 0:35:58

最新文章

  1. 高级控件5-RecyclerView

    与ViewPager类似的一个滑动的高级控件是RecyclerView&#xff0c;使用更加灵活。 第1步&#xff1a;添加依赖 打开mvn官网&#xff0c;检索recyclerview&#xff0c;选择使用人数较多的版本&#xff0c;复制依赖&#xff0c;放入项目中即可 快捷方法&#xff08;复制下面的代…...

    2024/4/27 8:25:16
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 随行付优化外卡收单,助力支付便利化

    解决老年人和境外游客在支付过程中遇到的问题和障碍&#xff0c;正逐渐成为整个支付行业的焦点关注词汇。 在有关提高支付服务便利度的意见发布后&#xff0c;有关收单行业的好消息不断涌现&#xff1a;中国银联于3月15日宣布投入30亿元用于升级基础设施&#xff0c;促进支付便…...

    2024/4/25 2:13:29
  4. 前端 js 经典:字符编码详解

    前言&#xff1a;计算机只能识别二进制&#xff0c;开发语言中数据类型还有数字&#xff0c;字母&#xff0c;中文&#xff0c;特殊符号等&#xff0c;都需要转化成二进制编码才能让技术机识别。 一. 编码方式 ACSLL、Unicode、utf-8、URL 编码、base64 等。 1. ACSLL 对英语…...

    2024/4/21 11:56:37
  5. 数据挖掘中的PCA和KMeans:Airbnb房源案例研究

    目录 一、PCA简介 二、数据集概览 三、数据预处理步骤 四、PCA申请 五、KMeans 聚类 六、PCA成分分析 七、逆变换 八、质心分析 九、结论 十、深入探究 10.1 第 1 步&#xff1a;确定 PCA 组件的最佳数量 10.2 第 2 步&#xff1a;使用 9 个组件重做 PCA 10.3 解释 PCA 加载和特…...

    2024/4/26 12:21:44
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57