ConfigurableBeanFactory

ConfigurableBeanFactory​ 接口包含了一些用于配置 bean 工厂的方法,使开发人员能够更好地控制 bean 的创建和初始化等行为。它继承自 ​HierarchicalBeanFactory​ 和 ​SingletonBeanRegistry​ 接口,并添加了一些扩展方法。

这是一个配置接口,大多数工厂类应该来实现此接口。除了包含在 {@link org.springframework.beans.factory.BeanFactory} 接口中的 bean 工厂客户端方法外,该接口还提供了一些用于配置 bean 工厂的功能。

这个 bean 工厂接口不适用于普通的应用程序代码使用:请在典型的场景中使用{@link org.springframework.beans.factory.BeanFactory}或 {@link org.springframework.beans.factory.ListableBeanFactory}。该扩展接口主要用于允许内部框架的插件和特殊访问 bean 工厂的配置方法。

public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry {}

标准单例作用域的范围标识符:{@value}。

可以通过`registerScope`方法添加自定义作用域。 参见:{@link #registerScope}。

String SCOPE_SINGLETON = "singleton";

标准原型作用域的范围标识符:{@value}。

可以通过`registerScope`方法添加自定义作用域。 参见:{@link #registerScope}。

String SCOPE_PROTOTYPE = "prototype";

设置这个Bean工厂的父级。

请注意,父级一旦设置就不能更改:如果该父级无法在工厂实例化时使用,则只能在构造函数之外设置。

void setParentBeanFactory(BeanFactory parentBeanFactory) throws IllegalStateException;

设置用于加载bean类的类加载器。 默认值为线程上下文类加载器。 请注意,该类加载器仅适用于尚未解析的Bean定义的加载。从Spring 2.0版本开始,默认情况下,Bean定义仅包含Bean类名称,在工厂处理Bean定义时才解析。

void setBeanClassLoader(@Nullable ClassLoader beanClassLoader);

返回此工厂用于加载bean类的类加载器(如果连系统的ClassLoader都无法访问,只返回null)。

@Nullable
	ClassLoader getBeanClassLoader();

设置是否缓存bean元数据,如给定的bean定义(以合并方式)和已解析的bean类。默认值为开启。

关闭此标志以启用对Bean定义对象的热刷新,特别是对于Bean类。如果该标志关闭,任何创建bean实例的操作将重新查询bean类加载器以获取新解析的类。

void setCacheBeanMetadata(boolean cacheBeanMetadata);

返回是否缓存bean元数据,例如给定的bean定义(以合并方式)和已解析的bean类。

boolean isCacheBeanMetadata();

添加一个PropertyEditorRegistrar到所有bean创建过程中,该注册器会为每个bean创建尝试创建新的PropertyEditor实例并在给定的注册表上进行注册。通过这种方式避免了在自定义编辑器上进行同步的需求,因此通常建议使用这种方法来代替registerCustomEditor方法。

void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar);

设置一个自定义类型转换器,用于在该BeanFactory中进行bean属性值、构造函数参数值等的转换。 此操作将覆盖默认的PropertyEditor机制,因此任何自定义编辑器或自定义编辑器注册器将变得无关紧要。

void setTypeConverter(TypeConverter typeConverter);

获取由这个BeanFactory使用的类型转换器。由于TypeConverter通常并不是线程安全的,因此每次调用此方法时可能会返回一个新的实例。

如果默认的PropertyEditor机制处于活动状态,则返回的TypeConverter将了解已注册的所有自定义编辑器。

TypeConverter getTypeConverter();

 添加一个String解析器,用于解析嵌入值,例如注解属性中的值。

void addEmbeddedValueResolver(StringValueResolver valueResolver);
判断是否已在此Bean工厂中注册了一个解析嵌入值的解析器,可以通过 ​resolveEmbeddedValue(String)​方法应用。
boolean hasEmbeddedValueResolver();

解析给定的嵌入值,例如注解属性。

@Nullable
	String resolveEmbeddedValue(String value);
添加一个新的BeanPostProcessor,将应用于由此工厂创建的bean。在工厂配置期间调用。 注意:在此处提交的后处理器将按照注册顺序应用;通过实现org.springframework.core.Ordered接口表达的任何排序语义将被忽略。注意,在自动检测到的后处理器(例如,ApplicationContext中的bean)之后,始终会应用在程序上注册的后处理器。
void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);

返回当前注册的BeanPostProcessors的数量(如果有的话)。

int getBeanPostProcessorCount();

注册给定的作用域,由给定的作用域实现支持。

void registerScope(String scopeName, Scope scope);

返回当前所有注册的作用域的名称。 这只会返回显式注册的作用域的名称。 内置的作用域,如"singleton"和"prototype",将不会显示。 如果没有任何作用域,则返回一个空数组。

String[] getRegisteredScopeNames();

返回给定作用域名称的作用域实现,如果有的话。 这只会返回显式注册的作用域。 内置的作用域,如"singleton"和"prototype",将不会暴露。 如果没有注册该作用域,则返回{@code null}。

@Nullable
	Scope getRegisteredScope(String scopeName);

设置此bean工厂的 ​ApplicationStartup​。 这允许应用程序上下文在应用程序启动期间记录指标。

void setApplicationStartup(ApplicationStartup applicationStartup);

提供与此工厂相关的安全访问控制上下文。 返回适用的AccessControlContext(永远不会为 ​null​)。

AccessControlContext getAccessControlContext();

从另一个Bean工厂中拷贝所有相关的配置。 应包括所有标准配置设置,以及BeanPostProcessors、Scopes和特定于工厂的内部设置。 不应包括任何实际bean定义的元数据,例如BeanDefinition对象和bean名称别名。

void copyConfigurationFrom(ConfigurableBeanFactory otherFactory);

给定一个bean名称,创建一个别名。通常我们使用这个方法来支持在XML id中是非法的名称(用于bean名称)。 通常在工厂配置期间调用,但也可用于运行时注册别名。因此,工厂实现应该同步别名访问。

void registerAlias(String beanName, String alias) throws BeanDefinitionStoreException;

解析此工厂中注册的所有别名目标名称和别名,应用给定的StringValueResolver对它们进行解析。 例如,该值解析器可以解析目标bean名称和别名名称中的占位符。

void resolveAliases(StringValueResolver valueResolver);

根据给定的bean名称返回合并的BeanDefinition, 如果有必要,则将子bean定义与其父bean定义合并。考虑祖先工厂中的bean定义。

BeanDefinition getMergedBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;

确定具有给定名称的bean是否为FactoryBean。

boolean isFactoryBean(String name) throws NoSuchBeanDefinitionException;

显式控制指定bean的当前创建状态。仅供容器内部使用。

void setCurrentlyInCreation(String beanName, boolean inCreation);

注册一个依赖于给定bean的依赖bean,在给定bean销毁之前销毁。

void registerDependentBean(String beanName, String dependentBeanName);

返回所有依赖于指定bean的bean的名称(如果有的话)。

String[] getDependentBeans(String beanName);

根据bean定义销毁给定的bean实例(通常是从此工厂获取的原型实例)。 在销毁过程中,对于任何异常,应该捕获并记录它们,而不是传播给该方法的调用者。

void destroyBean(String beanName, Object beanInstance);

在当前目标作用域中销毁指定的作用域bean(如果存在)。 在销毁过程中,对于任何异常,应该捕获并记录它们,而不是传播给该方法的调用者。

void destroyScopedBean(String beanName);

销毁此工厂中的所有单例bean,包括已被注册处理的内部bean。 通常在工厂关闭时调用。

在销毁过程中,对于任何异常,应该捕获并记录它们,而不是传播给该方法的调用者。

void destroySingletons();

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值