Spring中的BeanFactory与FactoryBean

在学习Spring与Shiro时发现一个易混淆之处:

       Spring中提供一种简单的过滤器处理方案:它将具体的操作交给内部的Filter对象delegate去处理,而这个对象

通过Spring IOC(BeanFactory)容器获取。

       而Shiro在与Spring结合使用时,在web.xml中配置代理过滤器 DelegatingFilterProxy,转发将请求交给从spring配

置文件中的ShiroFilterFactoryBean类获取的过滤器对象处理。在利用上述处理方案的同时,与之不同的是,

这里采用的是Spring的FactoryBean的方式获取这个对象。

       那么关键问题:Spring中的BeanFactoryFactoryBean有何区别,总结在此以作记录。

       BeanFactory

       静态工厂方法创建bean(直接调用某一个类的静态方法就可以返回bean的实例)
       实例工厂方法创建bean(即先需要创建工厂bean本身,再调用工厂的实例方法来返回bean的实例)
       而Spring IOC容器能够自动new对象,对象的创建交给spring管理,就是使用BeanFactory来实例化、配置和管理

对象,它只是一个接口,里面有一个getBean()方法。一般都不直接用BeanFactory,而是用它的实现类

ApplicationContext,如:ClassPathXmlApplicationContext

ApplicationContext ctx = new ClassPathXmlApplicationContext("config.xml");  
Car car = (Car) ctx.getBean("car");  
System.out.println(car);

       FactoryBean
       本人理解:Spring中有两种类型的bean,一种是普通的bean,即BeanFactory方式创建;另外一种是由FactoryBean

方式创建。有所不同的是,在从IOC容器中获取bean的时候,普通的bean返回该类型的一个对象,

而FactoryBean方式返回的是该FactoryBean对象的getObject方法所返回的对象。需要实现FactoryBean<T>接口:

import org.springframework.beans.factory.FactoryBean;

public class CarFactoryBean implements FactoryBean<Car> {
  // 返回bean实例 
  @Override 
  public Car getObject() throws Exception {
     return new Car("BMW", 500000);
  } 
  // 返回bean的类型 
  @Override 
  public Class<?> getObjectType() {
     return Car.class; 
  } 
  // 返回这个bean是否为单例bean 
  @Override 
  public boolean isSingleton() {
     return true; 
  } 
}

    疑问:两者都是创建Bean,那存在意义又是什么?

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值