
- BeanFactory
BeanFactory 是 Spring IoC 容器最基本的接口,定义了 IoC 容器的基本功能,负责对象的实例化、配置与装配。BeanFactory 中定义了 getBean() 方法用于获取 Bean 实例。在 Spring 应用中,BeanFactory 只负责 Bean 的管理和维护,不参与具体的业务逻辑。BeanFactory 的方法比较简单,代码如下:
public interface BeanFactory {
Object getBean(String name) throws BeansException;
<T> T getBean(String name,Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name,Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
- SingletonRegistry
SingletonRegistry 是 Spring 中的单例缓存,负责管理和维护所有的单例 Bean 实例。在 Spring 应用中,单例 Bean 实例是一种使用比较广泛的 Bean 实例,对于被 SingletonRegistry 缓存的单例 Bean 实例,应用启动后只会创建一次,并在以后的调用中直接返回缓存中的实例,而不会再次创建。SingletonRegistry 中定义了 registerSingleton() 方法用于注册单例 Bean 实例,代码如下:
public interface SingletonRegistry {
void registerSingleton(String beanName, Object singletonObject);
Object getSingleton(String beanName);
boolean containsSingleton(String beanName);
String[] getSingletonNames();
int getSingletonCount(); }
- FactoryBeanRegistry
FactoryBeanRegistry 是 Spring 中的工厂 Bean 缓存,用于管理和维护所有的 FactoryBean 实例。在 Spring 容器中,可以通过实现 FactoryBean 接口来创建 Bean 实例,而被 FactoryBeanRegistry 缓存的工厂 Bean 实例是一个比较特殊的实例类型,它的 getObject() 方法返回的是 FactoryBean 创建的目标 Bean 实例。FactoryBeanRegistry 中定义了 registerFactory() 方法用于注册工厂 Bean 实例,代码如下:
public interface FactoryBeanRegistry {
void registerFactory(String factoryName, FactoryBean<?> factory);
Object getFactory(String beanName);
boolean containsFactory(String beanName);
String[] getFactoryNames();
int getFactoryCount(); }
spring设计三级缓存的意义
Java Spring 三级缓存主要是为了提高 Bean 实例的加载性能。我们知道,在 Spring 容器启动时,会根据 Bean 定义信息创建 Bean 实例,这个过程可能会比较耗时,而且如果有很多 Bean 实例,可能会导致启动速度变得异常缓慢。
使用三级缓存可以将这个问题得到有效地解决,它可以将 Bean 实例缓存在内存中,避免了重复的实例化、配置和初始化过程,以达到提高 Bean 实例加载速度的目的。
具体来说,BeanFactory 缓存是为了避免解析和加载 BeanDefinition 计算时间过长,SingletonRegistry 缓存是为了避免重复实例化单例 Bean 的过程,而 FactoryBeanRegistry 缓存是避免频繁的调用 FactoryBean 的 getObject() 方法和实例化目标 Bean 的过程。
Java Spring 的三级缓存可以有效地提高 Bean 实例的加载性能,大大缩短了容器启动时间,提升了整个应用程序的性能表现。
文章评论