`

spring中bean,factorybean与beanfactory

阅读更多

 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,它的实现与设计模式中的工厂模式和修饰器模式类似。

 

 

 

 

 

  • 大小: 20.2 KB
分享到:
评论
2 楼 xiaoxiaoxuanao 2016-08-18  
求大神指点
1 楼 xiaoxiaoxuanao 2016-08-18  
    

相关推荐

    简单了解Spring中BeanFactory与FactoryBean的区别

    简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...

    Spring中BeanFactory与FactoryBean接口的区别详解

    在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...

    68-BeanFactory与FactoryBean1

    BeanFactory 和 FactoryBean 是 Spring 框架中的两个核心组件,前者负责管理 Bean 的生命周期,后者用于实例化复杂对象。它们都是 Spring 框架的重要组件,提供了许多强大的功能来简化应用程序的开发。

    详解Spring中的FactoryBean

    在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...

    Spring BeanFactory和FactoryBean区别解析

    Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...

    spring中的BeanFactory与FactoryBean的讲解

    Spring中的BeanFactory与FactoryBean的讲解 在Spring框架中,BeanFactory和FactoryBean都是非常重要的概念,它们都是Spring IoC容器的组成部分。今天,我们将深入探讨这两个概念的讲解。 一、BeanFactory ...

    spring中FactoryBean中的getObject()方法实例解析

    在 Spring 中,当配置文件中 &lt;bean&gt; 的 class 属性配置的实现类是 FactoryBean 时,通过 getBean 方法返回的不是 FactoryBean 本身,而是 FactoryBean#getObject() 方法所返回的对象。这相当于 FactoryBean#...

    Spring源码流程图

    在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、BeanFactoryPostProcessor、BeanPostProcessor等。这些组件协作以实现Bean的创建、初始化和生命周期管理。 Bean定义信息 Bean定义信息是描述Bean...

    SPRING中文开发参考手册

    - **BeanFactory**:它是 Spring 容器的基本实现,负责实例化、定位和配置应用程序中的对象,即 Bean。 - **BeanDefinition**:表示 Bean 的定义,包含了 Bean 的元数据,如 Class 信息、依赖关系等。 - **Bean的...

    Spring源码学习六:bean初始化1

    在预实例化过程中,Spring不仅处理普通的Bean,也特别照顾到`FactoryBean`的情况,体现了Spring对复杂场景的强大适应能力。理解这些源码细节有助于我们更好地掌握Spring的工作原理,从而更有效地进行Spring应用的...

    Spring源代码解析(一):IOC容器.doc

    BeanFactory接口是Spring的基石,它定义了基本的容器操作,如获取Bean、检查Bean是否存在、确定Bean的类型以及获取Bean的别名。以下是对BeanFactory接口中关键方法的解释: 1. `getBean(String name)`:此方法根据...

    【Spring】总结Spring整合Mybatis的底层原理实现步骤

    Bean与普通Java对象的区别在于,Bean是由Spring负责实例化的,同时,当从Spring容器中获取Bean时,Spring还会对Bean中带有`@Autowired` 注解的属性进行自动注入赋值,这是手工new对象无法实现的特性。Spring容器中的...

    Spring getBean流程图1

    4. **BeanDefinition查找**:接下来,Spring会在BeanFactory中查找对应的BeanDefinition。BeanDefinition包含了Bean的所有配置信息,如类名、依赖关系、初始化方法等。如果当前BeanFactory没有找到,会递归地向上...

    spring-reference

    根据提供的文档信息,我们可以深入探讨Spring框架的核心概念与特性,特别是文档中提到的关于Beans、BeanFactory、ApplicationContext等部分。 ### 1. 引言 #### 1.1 概览 Spring框架是一个轻量级的Java应用开发...

    spring学习资料

    在Spring中,如果一个Bean实现了FactoryBean接口,那么默认情况下,当我们通过该Bean的名称获取Bean时,实际上获取的是由FactoryBean创建的对象,而不是FactoryBean自身。为了获取FactoryBean本身,可以在Bean名称前...

    Spring 框架的设计理念与设计模式分析

    它提供了创建和管理Bean的基础架构,同时也包含了其他核心类和接口,比如BeanFactory和FactoryBean等。 - **Core组件的特点**:Core组件更像是一个工具箱,包含了大量实用类和接口,用于支持Bean的创建和配置过程。...

    Spring 设计模式总结1

    1. **简单工厂**:Spring中的`BeanFactory`体现了简单工厂模式,它根据传入的唯一标识创建Bean对象。`BeanFactory`在启动时读取配置,将Bean定义转换为`BeanDefinition`对象并注册到容器中。通过`...

    spring

    - **BeanPostProcessors** 和 **BeanFactoryPostProcessors**:允许开发者在Spring容器启动过程中对Bean定义进行修改。 - **PropertyPlaceholderConfigurer** 和 **PropertyOverrideConfigurer**:用于在运行时动态...

Global site tag (gtag.js) - Google Analytics