这篇文章将为大家详细讲解有关春天中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的作用有哪些