春天中FactoryBean的作用有哪些

  介绍

这篇文章将为大家详细讲解有关春天中FactoryBean的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<代码> FactoryBean 和<代码> BeanFactory>

<代码> BeanFactory> FactoryBean 一句话可能就说不清楚了。我们将从下面的例子逐步说明,FactoryBean是什么,它提供了什么样的能力。

/* *   ,*布料   ,*包含颜色属性   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  Cloth  {   红色,private  Red ;   ,//省略setter和getter方法   }

当初始化一个布对象时,我希望红对象也被赋值,此时我将在布的构造方法中新的一个红色的对象。

public 布(),{=,,red  new 红色();   }

但是随着业务的发展,我希望布的颜色属性将是蓝色蓝色,这时我将修改代码将红色和蓝色类抽象出一个颜色接口,布代码将重构:

/* *   ,*布料   ,*包含颜色属性   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  Cloth  {   ,private  Color 颜色;   ,public 布(),{   时间=color 才能;new 蓝色();   ,}   ,//省略setter和getter方法   }

业务又进一步发展,布类中的颜色属性将会根据一定的条件赋值为红红色,此时我们将代码继续重构:

/* *   ,*布料   ,*包含颜色属性   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  Cloth  {   ,private  Color 颜色;   ,public 布(),{   if 才能;(条件()),{   ,,color =, new 蓝(),,   ,,},{else    ,,color =, new 红();   ,,}   ,}   ,//省略setter和getter方法   }

这样的代码的确能运行,但如果有新的条件继续加入到业务中,此时我们又将改动布类的构造方法,而我们认为布方法是一个比较核心的业务对象,不应该经常对它进行修改,并且在构造方法中对于颜色对象创建过于冗余,不符合单一职责的原则,所以我们将颜色对象的创建过程通过工厂方法模式来完成。

<强>静态工厂方法

我们再次将布类进行如下重构(为了使示例代码更加简洁、下面的示例将只创建红对象):

/* *   ,*布料   ,*包含颜色属性   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  Cloth  {   ,private  Color 颜色;   ,public 布(),{   时间=color 才能;StaticColorFactory.newInstance ();   ,}   ,//省略setter和getter方法   } /* *   ,*静态工厂方法   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  StaticColorFactory  {   ,public  static  Color  getInstance (), {   return 才能;new 红();   ,}   }

如果我们在春天容器中要通过静态工厂方法,创建具体的对象实例应该怎么做呢?

众所周知,要将一个对象实例交由春容器管理,我们通常是通过以下XML配置:

& lt; bean  id=癱loth",类=癱om.coderbuff.bean.Cloth"比;   ,& lt; property  name=癱olor", ref=皉ed"/比;   & lt;/bean>   & lt; bean  id=皉ed",类=癱om.coderbuff.bean.Red",/在

但此时,红色对象实例并不是由春容器管理,而是由静态工厂方法创建的,此时我们应该讲XML配置修改为以下方式:

& lt; bean  id=癱loth",类=癱om.coderbuff.bean.Cloth"比;   ,& lt; property  name=癱olor", ref=皉ed"/比;   & lt;/bean>   & lt; bean  id=皉ed",类=癱om.coderbuff.factory.StaticColorFactory",工厂方法=癵etInstance",/在

这是春天的支持静态工厂方法创建对象实例的特定方式。这样我们就能在春天中通过静态工厂方法创建对象实例。

<强>实例工厂方法

有静态工厂方法,就有非静态工厂方法,区别就是方法不是静态的。

/* *   ,*实例工厂方法   ,* Created  by  OKevin 提醒2019/9/3   * */public  class  ColorFactory  {   ,public  Color  getInstance (), {   return 才能;new 红();   ,}   }

春天中FactoryBean的作用有哪些