加入收藏 | 设为首页 | 会员中心 | 我要投稿 52站长网 (https://www.52zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Java工程师必须搞明白:BeanFactory与FactoryBean是个啥?

发布时间:2019-09-11 22:20:49 所属栏目:优化 来源:咔咔侃技术
导读:1.前提概要 很多java开发者在使用Spring框架中都见过后缀为FactoryBean的类,比如Mybatis-Spring中的SqlSessionFactoryBean。说到这里就不得不提BeanFactory。FactoryBean和BeanFactory特别容易让人混淆,面试还经常问到这两种概念。其实它们的作用和使用

你可以使用xml的注入方式,当然也可以使用javaConfig的配置方式。这里我们使用javaConfig注入。我们将两个FactroyBean注入到Spring容器中去。

  1. @Configuration 
  2. public class Config { 
  3.  @Bean 
  4.  public TaskFactoryBean customTask() { 
  5.  TaskFactoryBean taskFactoryBean = new TaskFactoryBean(); 
  6.  taskFactoryBean.setCronExpression("0 15 10 * * ?"); 
  7.  String word = "定时任务一"; 
  8.  SomeService someService = new SomeService(); 
  9.  someService.setWord(word); 
  10.  taskFactoryBean.setSomeService(someService); 
  11.  return taskFactoryBean; 
  12.  } 
  13.  @Bean 
  14.  public TaskFactoryBean otherTask() { 
  15.  TaskFactoryBean taskFactoryBean = new TaskFactoryBean(); 
  16.  taskFactoryBean.setCronExpression("0 15 17 * * ?"); 
  17.  String word = "定时任务二"; 
  18.  SomeService someService = new SomeService(); 
  19.  someService.setWord(word); 
  20.  taskFactoryBean.setSomeService(someService); 
  21.  return taskFactoryBean; 
  22.  } 

3.4 FactoryBean的一些特点

一般如上声明后,@Bean注解如果不显式声明bean名称则方法名作为bean的名称,而且返回值作为注入的Bean。但是我们通过debug发现却是这样的:

Java工程师必须搞明白:BeanFactory与FactoryBean是个啥?

也就是说通过方法名是返回FactoryBean 创建的Bean。那么如何返回该FactoryBean呢?上图中也给出了答案在方法前增加引用符“&”。具体的原因还用从BeanFactory中寻找,真是不是冤家不聚头

Java工程师必须搞明白:BeanFactory与FactoryBean是个啥?

我们对上面声明的两个bean进行测试,也出色地完成了不同的定时任务业务逻辑。

  1. @Autowired 
  2.  private Task customTask; 
  3.  @Autowired 
  4.  private Task otherTask; 
  5.  @Test 
  6.  public void task() { 
  7.  customTask.execute(); 
  8.  otherTask.execute(); 
  9.  } 

4. 总结

在后续的使用中你可以通过声明不同的cron表达式,以及不同SomeService来定制更多的定时任务。通过这个例子相信你会对FactoryBean有的清晰的认识。demo就不提供了,非常简单,强烈建议你自己试一试以加深理解。

(编辑:52站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读