1 普通Bean的创建
spring 中的普通bean的创建是通过读取配置文件,将所有配置文件信息保存到beandefinition中,在使用getbean的时候通过反射创建实例,然后再将属性值填充。
1.1 普通bean的注入方式
1) 使用构造器注入
<bean id="person" class="framework.spring.test.Person">
<constructor-arg index="0" value="1"/>
<constructor-arg index="1" value="name"/>
</bean>
2) 使用setter方法注入
给属性添加set方法注入的时候使用如下方式:
<bean id="user" class="framework.spring.test.User">
<property name="id" value="1"/>
<property name="name" value="name"/>
<property name="person" ref="person"/>
</bean>
3) 使用注解方式注入
@Autowired
private Person person;
注解可以加在属性上,也可以加在set方法上
2. FactoryBean的创建
由于普通bean创建的时候只能通过反射,不能自定义bean的创建方式,因而如果有需要自定义bean创建方式的需要的时候,可以使用factorybean。
1)自定义factorybean
创建factorybean,spring在定义bean的时候为我们提供了factory-bean这样一个属性,说明这个bean是一个由工厂类创建的对象,这个对象通过指定的factory-method方法生成。
public class JDBConnectionFactory implements DBConnectionFactory {
private String nodeName;
public JDBConnectionFactory(String nodeName) {
this.nodeName = nodeName;
}
public Connection create() {
Connection connection = null;
try {
connection = new JDBC4Connection(nodeName, 0 ,new Properties(), "", "");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
public class JDBConnectionFactory implements DBConnectionFactory {
private String nodeName;
public JDBConnectionFactory(String nodeName) {
this.nodeName = nodeName;
}
public Connection create() {
Connection connection = null;
try {
connection = new JDBC4Connection(nodeName, 0 ,new Properties(), "", "");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
2)通过factoryBean接口创建bean
FactoryBean接口有这样几个方法:
a) T getObject() throws Exception;
b) Class<?> getObjectType();
c) boolean isSingleton();
通过getObject产生最终要拿到的对象
public class PersonFactoryBean implements FactoryBean<Person>{
public Person getObject() throws Exception {
return new Person(0,"");
}
public Class<?> getObjectType() {
return Person.class;
}
public boolean isSingleton() {
return false;
}
}
<bean id="personByFactory" class="framework.spring.test.PersonFactoryBean"/>
3 BeanFactory
BeanFactory:创建bean的工厂,BeanFactorty是一个接口,spring中所有对象的创建都围绕着BeanFactory展开。spring中BeanFacroty的实现包括AutowireCapableBeanFactory、DefaultListableBeanFactory、XmlBeanFactory等,通常在springIOC中,会通过beanFactory创建factoryBean。BeanFactory接口中的方法包括:
4 BeanFactory与FactoryBean的区别
BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
相关推荐
简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...
在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...
BeanFactory 和 FactoryBean 是 Spring 框架中的两个核心组件,前者负责管理 Bean 的生命周期,后者用于实例化复杂对象。它们都是 Spring 框架的重要组件,提供了许多强大的功能来简化应用程序的开发。
在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...
Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...
Spring中的BeanFactory与FactoryBean的讲解 在Spring框架中,BeanFactory和FactoryBean都是非常重要的概念,它们都是Spring IoC容器的组成部分。今天,我们将深入探讨这两个概念的讲解。 一、BeanFactory ...
在 Spring 中,当配置文件中 <bean> 的 class 属性配置的实现类是 FactoryBean 时,通过 getBean 方法返回的不是 FactoryBean 本身,而是 FactoryBean#getObject() 方法所返回的对象。这相当于 FactoryBean#...
在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、BeanFactoryPostProcessor、BeanPostProcessor等。这些组件协作以实现Bean的创建、初始化和生命周期管理。 Bean定义信息 Bean定义信息是描述Bean...
- **BeanFactory**:它是 Spring 容器的基本实现,负责实例化、定位和配置应用程序中的对象,即 Bean。 - **BeanDefinition**:表示 Bean 的定义,包含了 Bean 的元数据,如 Class 信息、依赖关系等。 - **Bean的...
在预实例化过程中,Spring不仅处理普通的Bean,也特别照顾到`FactoryBean`的情况,体现了Spring对复杂场景的强大适应能力。理解这些源码细节有助于我们更好地掌握Spring的工作原理,从而更有效地进行Spring应用的...
BeanFactory接口是Spring的基石,它定义了基本的容器操作,如获取Bean、检查Bean是否存在、确定Bean的类型以及获取Bean的别名。以下是对BeanFactory接口中关键方法的解释: 1. `getBean(String name)`:此方法根据...
Bean与普通Java对象的区别在于,Bean是由Spring负责实例化的,同时,当从Spring容器中获取Bean时,Spring还会对Bean中带有`@Autowired` 注解的属性进行自动注入赋值,这是手工new对象无法实现的特性。Spring容器中的...
4. **BeanDefinition查找**:接下来,Spring会在BeanFactory中查找对应的BeanDefinition。BeanDefinition包含了Bean的所有配置信息,如类名、依赖关系、初始化方法等。如果当前BeanFactory没有找到,会递归地向上...
根据提供的文档信息,我们可以深入探讨Spring框架的核心概念与特性,特别是文档中提到的关于Beans、BeanFactory、ApplicationContext等部分。 ### 1. 引言 #### 1.1 概览 Spring框架是一个轻量级的Java应用开发...
在Spring中,如果一个Bean实现了FactoryBean接口,那么默认情况下,当我们通过该Bean的名称获取Bean时,实际上获取的是由FactoryBean创建的对象,而不是FactoryBean自身。为了获取FactoryBean本身,可以在Bean名称前...
它提供了创建和管理Bean的基础架构,同时也包含了其他核心类和接口,比如BeanFactory和FactoryBean等。 - **Core组件的特点**:Core组件更像是一个工具箱,包含了大量实用类和接口,用于支持Bean的创建和配置过程。...
1. **简单工厂**:Spring中的`BeanFactory`体现了简单工厂模式,它根据传入的唯一标识创建Bean对象。`BeanFactory`在启动时读取配置,将Bean定义转换为`BeanDefinition`对象并注册到容器中。通过`...
- **BeanPostProcessors** 和 **BeanFactoryPostProcessors**:允许开发者在Spring容器启动过程中对Bean定义进行修改。 - **PropertyPlaceholderConfigurer** 和 **PropertyOverrideConfigurer**:用于在运行时动态...