Spring Framework核心模块

core

Spring Core是Spring框架的基础API核心模块,提供了基本的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)功能。

core核心功能举例

资源管理-系统资源加载

FileSystemResource是Spring框架中的一个实现了Resource接口的类,用于从文件系统中加载资源。它可以根据指定的文件路径来加载文件系统中的资源。
Spring Framework核心模块_第1张图片

当你使用FileSystemResource加载资源时,你需要提供一个文件路径,它指向文件系统中的实际文件。FileSystemResource将会根据提供的路径去访问文件系统并加载相应的资源。

Spring Framework核心模块_第2张图片

Bean

IOC容器/DI依赖注入

Spring Core提供了一个容器,也称为应用上下文(Application Context),它负责管理和装配应用程序中的对象。它实现了控制反转(IoC),即框架负责创建和管理对象的生命周期,而不是由开发人员手动创建和管理。同时还通过依赖注入管理对象间的依赖关系。对应的接口为:BeanFactory。

Spring Framework核心模块_第3张图片

DI 依赖注入

BeanFactory通过Autowire实现依赖注入,AutowiredAnnotationBeanPostProcessor是@Autowire注解的实现类,它是一个后置处理器,用于在Bean实例化后对标记了@Autowired注解的字段、构造函数或方法进行依赖注入。它会扫描Bean中的@Autowired注解,解析注解所标记的依赖关系,并将相应的依赖对象注入到对应的位置。processInjection()方法是在Spring框架中用于执行依赖注入的方法。

	//缓存已检查过的成员变量
	private final Set<String> lookupMethodsChecked = Collections.newSetFromMap(new ConcurrentHashMap<>(256));

	//缓存类的候选构造函数
	private final Map<Class<?>, Constructor<?>[]> candidateConstructorsCache = new ConcurrentHashMap<>(256);

	//缓存类的依赖注入元数据
	private final Map<String, InjectionMetadata> injectionMetadataCache = new ConcurrentHashMap<>(256);


	public void processInjection(Object bean) throws BeanCreationException {
		Class<?> clazz = bean.getClass();
        //查找Bean中的包含@Autowire注解的字段、构造方法、方法
		InjectionMetadata metadata = findAutowiringMetadata(clazz.getName(), clazz, null);
		try {
			metadata.inject(bean, null, null);
		}
		catch (BeanCreationException ex) {
			throw ex;
		}
		catch (Throwable ex) {
			throw new BeanCreationException(
					"Injection of autowired dependencies failed for class [" + clazz + "]", ex);
		}
	}

	//遍历方法实现
	private InjectionMetadata findAutowiringMetadata(String beanName, Class<?> clazz, @Nullable PropertyValues pvs) {
		// Fall back to class name as cache key, for backwards compatibility with custom callers.
		String cacheKey = (StringUtils.hasLength(beanName) ? beanName : clazz.getName());
		// Quick check on the concurrent map first, with minimal locking.
		InjectionMetadata metadata = this.injectionMetadataCache.get(cacheKey);
		if (InjectionMetadata.needsRefresh(metadata, clazz)) {
			synchronized (this.injectionMetadataCache) {
				metadata = this.injectionMetadataCache.get(cacheKey);
				if (InjectionMetadata.needsRefresh(metadata, clazz)) {
					if (metadata != null) {
						metadata.clear(pvs);
					}
					metadata = buildAutowiringMetadata(clazz);
					this.injectionMetadataCache.put(cacheKey, metadata);
				}
			}
		}
		return metadata;
	}
DI 依赖查找

BeanFactory定义了依赖查找的方法。依赖查找是一种主动获取依赖对象的方式,用于获取其他Bean或依赖的实例。通过依赖查找,可以在需要的时候动态的获取所需的依赖对象,并在代码中使用。

Spring Framework核心模块_第4张图片

持续更新ing

你可能感兴趣的:(Spring框架,spring,java,后端)