Bean 对象的构建

Bean 对象的构建

Spring 中Bean对象的构建,提供了如下两种方式:

  1. 直接通过构造方法(无参构造)
 
  1. 通过工厂的实例方法(调用FactoryBean的getObject方法)-工厂对象的创建
    代码实现:通过FactoryBean的getObject方法创建类的实例(一般创建一些工厂对象时通常会采用这样的方式)。

定义一个工厂对象,此类型的对象交给FactoryBean类型的对象进行实例化。

package beans;
/**
 * 假设此类是创建对象的工厂
 * 例如:SqlSessionFactory
 * @author Administrator
 *
 */
public class ObjectFactory {

}

定义一个Bean工厂ObjectFactoryBean(要实现FactoryBean接口),此工厂要创建ObjectFactory类型对象,然后将此对象交给Spring管理。

package beans;

import org.springframework.beans.factory.FactoryBean;
/**
 * spring框架有这么一种规则
 * 假如由Spring管理的对象是工厂对象时,
 * 系统底层通常会提供一个工厂对应的bean对象
 * 这个bean对象要实现Spring中的一个接口FactoryBean
 *
 */
//实现接口要为泛型传值,这里为T传Object 定义接口的目的是定义规则
public class ObjectFactoryBean implements FactoryBean {

    /**
     * 通常在此方法中创建对应的对象
     * Spring底层在同个配置文件构建Bean对象时,
     * 首先会检测你这bean对象是否实现了FactoryBean接口
     * 假如实现了接口,spring会调用这个Bean对象的getObject()方法
     * 返回一个类的实例
     * @return
     * @throws Exception
     */
    @Override
    public ObjectFactory getObject() throws Exception {
        System.out.println("ObjectFactoryBean.getObject()");
        return new ObjectFactory();//也可以通过反射
    }

    /**
     * 1.对象单例并且容器关闭时执行此方法
     * 2.底层通过这个方法销毁这个类型的对象
     * 单例对象spring即负责创建又负责销毁
     * 多例对象spring只负责创建不负责销毁
     */
    @Override
    public Class getObjectType() {
        System.out.println("ObjectFactoryBean.getObjectType()");
        return ObjectFactory.class;
        //假如对象是单例时,底层系统会在容器关闭时,依据此方法的返回类型,查找对象,并销毁对象
        
    }
/**
 * 通过此方法的返回值告诉底层系统此类的对象是否单例设计(此类的实例在内存中只有一份)
 * 此方法何时调用:对象创建时,单例对象销毁时
 */
    @Override
    public boolean isSingleton() {
        System.out.println("ObjectFactoryBean.isSingleton()");
        return true;
    }
    
}

在配置文件中配置此Bean对象


你可能感兴趣的:(Bean 对象的构建)