AbstractApplicationContext 之 prepareBeanFactory

本文深入解析了Spring框架中AbstractApplicationContext的refresh方法内的prepareBeanFactory过程。该过程涉及配置类加载器、表达式解析器设置、默认属性编辑器注册、BeanPostProcessor实现及依赖注入忽略等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在  AbstractApplicationContext  refresh方法中会调用prepareBeanFactory方法进行容器的特殊属性处理

 

protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {
		// Tell the internal bean factory to use the context's class loader etc.
		beanFactory.setBeanClassLoader(getClassLoader());
		beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver());
//注册默认属性编辑器
		beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this));

		
ApplicationContextAwareProcessor实现了BeanPostProcessor接口对于bean实现了
EmbeddedValueResolverAware ,ResourceLoaderAware ,ApplicationEventPublisherAware ,MessageSourceAware 
ApplicationContextAware等接口就通过反射进行赋值。
		beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
		beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);
		beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);
		beanFactory.ignoreDependencyInterface(MessageSourceAware.class);
		beanFactory.ignoreDependencyInterface(ApplicationContextAware.class);

		// BeanFactory interface not registered as resolvable type in a plain factory.
		// MessageSource registered (and found for autowiring) as a bean.
		beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
		beanFactory.registerResolvableDependency(ResourceLoader.class, this);
		beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
		beanFactory.registerResolvableDependency(ApplicationContext.class, this);

		// Detect a LoadTimeWeaver and prepare for weaving, if found.
		if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {
			beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));
			// Set a temporary ClassLoader for type matching.
			beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));
		}

		// Register default environment beans.
		if (!beanFactory.containsBean(SYSTEM_PROPERTIES_BEAN_NAME)) {
			Map systemProperties;
			try {
				systemProperties = System.getProperties();
			}
			catch (AccessControlException ex) {
				systemProperties = new ReadOnlySystemAttributesMap() {
					@Override
					protected String getSystemAttribute(String propertyName) {
						try {
							return System.getProperty(propertyName);
						}
						catch (AccessControlException ex) {
							if (logger.isInfoEnabled()) {
								logger.info("Not allowed to obtain system property [" + propertyName + "]: " +
										ex.getMessage());
							}
							return null;
						}
					}
				};
			}
			beanFactory.registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, systemProperties);
		}

 

 

:: Spring Boot :: (v3.4.5) 2025-05-13T13:54:12.779+08:00 INFO 17284 --- [Air situation early warning system] [ main] irSituationEarlyWarningSystemApplication : Starting AirSituationEarlyWarningSystemApplication using Java 24 with PID 17284 (D:\37\1\Air situation early warning system\target\classes started by 周黄庆 in D:\37\1\Air situation early warning system) 2025-05-13T13:54:12.780+08:00 INFO 17284 --- [Air situation early warning system] [ main] irSituationEarlyWarningSystemApplication : No active profile set, falling back to 1 default profile: "default" 2025-05-13T13:54:12.855+08:00 ERROR 17284 --- [Air situation early warning system] [ main] o.s.boot.SpringApplication : Application run failed java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:728) ~[spring-context-6.2.6.jar:6.2.6] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:601) ~[spring-context-6.2.6.jar:6.2.6] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.4.5.jar:3.4.5] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[spring-boot-3.4.5.jar:3.4.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.4.5.jar:3.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.4.5.jar:3.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) ~[spring-boot-3.4.5.jar:3.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) ~[spring-boot-3.4.5.jar:3.4.5] at com.example.asews.AirSituationEarlyWarningSystemApplication.main(AirSituationEarlyWarningSystemApplication.java:10) ~[classes/:na] Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ParserContext at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) ~[na:na] ... 9 common frames omitted Exception in thread "main" java.lang.IllegalStateException: java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:824) at org.springframework.boot.SpringApplication.run(SpringApplication.java:328) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) at com.example.asews.AirSituationEarlyWarningSystemApplication.main(AirSituationEarlyWarningSystemApplication.java:10) Caused by: java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:601) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ... 3 more Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ParserContext at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) ... 9 more 进程已结束,退出代码为 1
05-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值