接上回《
spring管理bean原理【山寨版】》
本次主要复习spring实例化bean的方式,spring3共提供了三种实例化bean的方式分别为:构造器实例化 静态工厂实例化 动态工厂实例化,下面一一详解:
公共使用的实体
方式一:构造器实例化xml配置

测试



以上就是构造器实例化方式,简单而方便便,个人比较喜欢使用此法,根据不同的参数配置,可达到不同的效果的属性初始化,真心不错!
方式二:静态工厂静态工厂实例化方法需要另外建立一个工厂类

本工厂类提供2个方法,分别对应带参,无参构造器!
xml配置

测试

方式三:动态工厂
跟静态工厂一样,需要一个工厂类,不同的是,动态工厂中的方法为非静态的
xml文件
测试:
【注意:】 根据上面的xml配置,细心的朋友会发现静态工厂xml配置方式也可以跟动态工厂那样配置如:
经过测试,发现此法不妥,会报:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘personStaticFactoryWithName‘ defined in
class path resource [beans-instance.xml]: No matching factory method
found: factory bean ‘staticFactory‘; factory method
‘creatPersonInstace()‘. Check that a method with the specified name and
arguments exists and that it is
non-static.异常,至于为什么会这样,具体细节目前小飞我尚未清楚,应该是跟静态工厂类中静态方法属于整个类有关吧!
总结下(抄的,觉得挺好的!拿来分享下):
方式一:通过bean的缺省构造函数创建,当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。
方式二:利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处理,则可用这个factory方法险进行统一的处理等等。
方式三:利用实例化factory方法创建,即将factory方法也作为了业务bean来控制,觉得1可用于集成其他框架的bean创建管理方法,2能够使bean和factory的角色互换。