伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 教育考试 » 文章详细 订阅RssFeed

【spring】别被一个FactoryBean问蒙了

来源:本站原创 浏览:86次 时间:2022-12-07

什么是FactoryBean?别动不动就比较它和BeanFactory的区别,很显然前者是一个bean,而后者是一个是factory。既然是一个bean,又是在spring中,差不多很可能就是用来创建bean的,bean最后还是要进factory的。下来看下FactoryBean接口信息。

public interface FactoryBean<T> {
  @Nullable
  T getObject() throws Exception;
  @Nullable
  Class<?> getObjectType();
  default boolean isSingleton() {
    return true;
  }
}

接口比较简单,有两个待实现的方法分别用来返回实例对象和对象类型,一个返回true的默认单实例方法。下面通过FactoryBean来实例化自己的bean。

import org.springframework.beans.factory.FactoryBean;
public class BirdFactoryBean implements FactoryBean<Bird> {
  @Override
  public Bird getObject() {
    return new Bird();
  }
  @Override
  public Class<?> getObjectType() {
    return Bird.class;
  }
}
class Bird{
}

就用FactoryBean返回一只鸟,然后把BirdFactoryBean进行实例化,采用古老的方式@Bean。

@Bean
public BirdFactoryBean birdFactoryBean(){
  return new BirdFactoryBean();
}

我们知道通过注解@Bean创建的bean默认的name是方法名,下面使用方法名来获取bean对象,看看拿到的是什么。

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
Object o1 = applicationContext.getBean("birdFactoryBean");
System.out.println(o1.getClass());
--class com.star.model.Bird
Object o2 = applicationContext.getBean("&birdFactoryBean");
System.out.println(o2.getClass());
--class com.star.condition.BirdFactoryBean

可以看到直接使用beanName获取得到的是自定义FactoryBean的getObject方法返回的实例,而使用&beanName获取得到的是FactoryBean自身。当然这里也可以直接通过类型获取目标对象,&是spring指定的前缀,这里的beanName间接引用(dereference)了目标对象。源代码也比较清晰,打个断点一目了然。

通过FactoryBean可以更灵活创建更为复杂的bean,比如spring AOP 中的ProxyFactoryBean,比如加载属性文件的PropertiesFactoryBean......


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net