ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
一个 Spring IOC容器管理了一个或者更多的Bean,这些 Bean通过你提供给容器的Bean的定义来创建。比如:编写在 XML 文件中的`<bean/>`元素。 在容器内部,这些Bean的定义对应于`BeanDefinition`对象,该对象所包含的元数据如下: * 一个全限定类名:通常是被定义Bean的实现类。 * Bean的行为配置元素:Bean对象要表现的行为状态(范围、生命周期、回调函数等等)。 * 与此Bean一起工作的其他Bean的引用:这些引用也被称为合作者或者依赖。 * 其它用于创建最新对象的配置:比如,管理连接池的Bean中,可以使用的连接数量或者连接池的大小限制。 这些元数据被转换成属性集,构成了Bean的定义。 表1.Bean的定义 | 属性 | 解释在... | | --- | --- | | class | [1.3.2.实例化Bean](1.3.2.实例化Bean.md) | | name | [1.3.1.Bean的命名](1.3.1.Bean的命名.md) | | scope | [1.5.Bean的范围](1.5.Bean的范围.md) | | construtor arguments | [1.4.1.依赖注入](1.4.1.依赖注入.md) | | properties | [1.4.1.依赖注入](1.4.1.依赖注入.md) | | autowiring mode | [1.4.5.注入合作者](1.4.5.注入合作者.md) | | lazy-initialization mode | [1.4.4.Bean的懒加载](1.4.4.Bean的懒加载.md) | | initialization method | [1.6.1.生命周期回调函数](1.6.1.生命周期回调函数.md) | | destruction method | [1.6.1.生命周期回调函数](1.6.1.生命周期回调函数.md) | 除了通过Bean的定义信息来创建对象外,`ApplicationContext`的实现类也允许用户手动向容器中注册已实例化的对象。这一操作可以通过访问`ApplicationContext`的父类BeanFactory中的getBeanFactory方法来完成,该方法返回`BeanFactory `的实现 `DefaultListableBeanFactory`。`DefaultListableBeanFactory`支持通过`registerSingleton(..)`和`registerBeanDefinition(..)`来注册Bean。然而,典型的应用一般只通过Bean的定义来创建Bean的实例。 > 为了使容器在自动注入和其他检查阶段能够正确推断Bean,手动提供的对象或者Bean的定义应该被尽早注册。尽管在某种程度上,覆盖已存在的元数据和单实例是支持的,但是在应用运行时向容器中注册Bean是不严谨的,这可能会导致同时访问容器异常,也可能会导致容器的状态不一致。