关于BeanFactory 收藏
BeanFactory 提供了配置框架的基本的功能,而ApplicationContext为它增加了更强大的功能,这些功能中的一些或许更加接近J2EE并且围绕企业级应用。一般来说,ApplicationContext是BeanFactory的完全超集,任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext.用户有时不能确定BeanFactory和ApplicationContext中哪一个在特定场合下更适合。 通常大部分在J2EE环境的应用中,最好选择使用ApplicationContext, 因为它不仅提供了BeanFactory所有的特性以及它自己附加的特性,而且还提供以声明的方式使用一些功能, 这通常是令人满意的。BeanFactory主要是在非常关注内存使用的情况下 (比如在一个每kb都要计算的applet中)使用,而且你也不需要用到ApplicationContext的所有特性。
BeanFactory实际上是实例化,配置和管理众多bean的容器。 这些bean通常会彼此合作,因而它们之间会产生依赖。 BeanFactory使用的配置数据可以反映这些依赖关系中 (一些依赖可能不像配置数据一样可见,而是在运行期作为bean之间程序交互的函数)。
一个BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 这个接口有多个实现。 最常使用的的简单的eanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory。 (这里提醒一下:ApplicationContext是BeanFactory的子类, 所以大多数的用户更喜欢使用ApplicationContext的XML形式)。
虽然大多数情况下,几乎所有被BeanFactory管理的用户代码都不需要知道BeanFactory, 但是BeanFactory还是以某种方式实例化。可以使用下面的代码实例化BeanFactory:
InputStream is = new FileInputStream("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
或者
ClassPathResource res = new ClassPathResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
或者
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
// of course, an ApplicationContext is just a BeanFactory
BeanFactory factory = (BeanFactory) appContext;
很多情况下,用户代码不需要实例化BeanFactory, 因为Spring框架代码会做这件事。例如,web层提供支持代码,在J2EE web应用启动过程中自动载入一个Spring ApplicationContext。这个声明过程在这里描述:
编程操作BeanFactory将会在后面提到,下面部分将集中描述BeanFactory的配置.
一个最基本的BeanFactory配置由一个或多个它所管理的Bean定义组成。在一个XmlBeanFactory中,根节点beans中包含一个或多个bean元素。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="..." class="...">
...
</bean>
<bean id="..." class="...">
...
</bean>
...
</beans>
分享到:
相关推荐
以上代码提供了一个简单的`BeanFactory`实现,它使用HashMap存储bean并提供getBean()方法获取bean。注入依赖的部分仅考虑了字段注入,并且假设存在一个`Inject`注解来标记需要注入的依赖。 虽然这是一个简化的示例...
BeanFactory是一个接口,它定义了管理对象(即bean)的核心方法。通过这个接口,我们可以实现对bean的创建、初始化、查找和销毁等操作。它是Spring IoC容器的基础,提供了对bean的实例化、配置、装配和管理的抽象层...
BeanFactory支持多种作用域,每种作用域决定了bean的生命周期和实例化策略: - **单例(Singleton)**:每个请求都会返回同一个bean实例。这是默认作用域。 - **原型(Prototype)**:每次请求都会创建一个新的bean...
### Spring框架中的BeanFactory知识点详解 #### 一、BeanFactory...此外,Spring框架还提供了多种BeanFactory的实现方式,如`XmlBeanFactory`和`AnnotationConfigApplicationContext`等,以适应不同的应用场景需求。
- Spring允许开发者通过声明式的方式定义bean的初始化和销毁方法,增强了代码的可维护性和可测试性。 - **配置元数据格式:** - Spring支持多种配置元数据格式,包括XML、Java配置类和Properties文件等。 - **...
Spring框架提供了多种IOC容器,其中最基础的是`BeanFactory`接口,它定义了Spring IOC容器的基本功能。`BeanFactory`主要关注于对象的创建和依赖关系的管理,但不提供诸如资源加载、国际化消息处理等高级功能。`...
Spring提供了多种管理bean生命周期的方法,包括InitializingBean和DisposableBean接口的回调方法,其他Aware接口(如BeanNameAware、ApplicationContextAware等),自定义的init()和destroy()方法,以及注解@...
- **资源接口**:通过使用Resource接口来抽象Bean定义的数据来源,使得Bean的定义可以来自多种资源,如文件系统、网络等。 - **Bean定义读取**:Bean定义的读取过程通过委托给BeanDefinitionReader完成,例如...
1. **初始化回调**:Bean在实例化后,可以调用初始化方法,例如实现InitializingBean接口的`afterPropertiesSet()`方法,或使用`@PostConstruct`注解的方法。 2. **业务逻辑执行**:Bean实例化并初始化后,Spring将...
BeanFactory和FactoryBean的区别在于,BeanFactory需要遵循完整的创建流程,而FactoryBean只需要调用getObject()方法来返回具体对象。 Spring源码流程图是了解Spring框架核心组件和Bean生命周期的关键。通过了解...
Spring提供了多种管理bean生命周期的方法,包括: 1. 实现InitializingBean和DisposableBean接口的回调方法。 2. 使用其他Aware接口(如ApplicationContextAware)来感知特定上下文信息。 3. 在bean配置文件中定义...
此外,还可以使用@PostConstruct和@PreDestroy注解来指定初始化和销毁方法。 Spring的IoC(Inversion of Control,控制反转)通过BeanFactory接口和ApplicationContex接口实现。BeanFactory是IoC容器的核心,它负责...
2. 使用 Spring 框架的好处:包括 Dependency Injection(DI) 方法、轻量级的 IOC 容器、模块化的设计、简单的测试、Web 框架等多种优势。 3. 控制反转(IOC)和依赖注入的定义:控制反转是应用于软件工程领域的,在...
其中BeanFactory提供了基础的依赖注入支持,而ApplicationContext是BeanFactory的子接口,提供了更丰富的功能,包括支持国际化、资源加载、事件传播等。 2. 数据访问/集成:包括了对数据访问技术的支持,如JDBC...
BeanFactory会调用初始化回调方法(如InitializingBean的afterPropertiesSet()或自定义init()方法),以及销毁回调方法(DisposableBean的destroy()或destroy()方法)。此外,@PostConstruct和@PreDestroy注解也可...
- 在 **AbstractApplicationContext** 中,**refresh** 方法首先调用 **obtainFreshBeanFactory** 和 **refreshBeanFactory** 方法来创建一个新的BeanFactory实例。 - **AbstractRefreshableApplicationContext** 的...