FactoryBean与BeanFactory的区别


FactoryBean和BeanFactory都是spring的一个类工厂,BeanFactory只能生产一种类型的类,FactoryBean可以生产两种类型的类,一种跟BeanFactory类似,生产的是当前对象,另一种是通过getObject()返回的对象。

FactoryBean要返回当前本身的对象时,需要在getBean()时,在获取的对象前面加&,如:getBean("&daoFactoryBean")。当一个类依赖关系很复杂的时候,而我们有需要使用这个类对象时采用FactoryBean获取。如我们mybatis中经常使用的sqlSessionFactory 对象,他就是通过 SqlSessionFactoryBean实现FactoryBean,通过getObject()方法获取的。

FactoryBean通过getObject()获取对象示例如下:

@Component("daoFactoryBean")
public class DaoFactoryBean implements FactoryBean {
    public void testBean(){
        System.out.println("testBean");
    }
    @Override
    public Object getObject() throws Exception {
        return new TempDaoFactoryBean();
    }
    public Class<?> getObjectType() {
        return TempDaoFactoryBean.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
}
public class TempDaoFactoryBean {
    public void test(){
        System.out.println("FactoryBean");
    }
}
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Appconfig.class);
        TempDaoFactoryBean temp = (TempDaoFactoryBean)ac.getBean("daoFactoryBean");
        temp.test();
    }
}
运行结果:FactoryBean

FactoryBean获取本身对象示例:

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Appconfig.class);
        DaoFactoryBean temp = (DaoFactoryBean)ac.getBean("&daoFactoryBean");
        temp.testBean();
    }
}
运行结果:testBean

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM