46--beanFactory
这一章说的就是BeanFactory。这个东东在Spring中是一个核心角色,在Spring的框架中,主要是靠BeanFactory来管理和配置各类bean.在实际中与bean打交道的是上一个章节提过的ApplicationContext。按JAVA推崇的宗旨,BeanFactory是一个接口,是一个可以配置和管理任何Java类的内部接口。像我们所知的XmlBeanFactory是从xml中读取bean ,还有一个ListableBeansFacory,这是一个从属性文件读取定义的。在Spring中常用的都是xmlBeanFactory的配置方式,当然还有属性文件定义Bean的方式,BeanFacotory是一个承载Bean的大工厂,负责各类Bean的产生调用销毁的过程。所以,又回到了我最为关注生命周期中来。只是beanFactory里管理的Bean都是单态的状态也就是singleton模式。使用单态模式好像是J2EE中一个传统。这样保证一个类只有一个实例。这样可以提高性能,减少 对象的创建和销毁时的开销。避免类被多次实例化,让相同类的全部实例共享同一内存区。
bean的生命周期在容器中完成。Spring的运作机制控制着这个bean,先是:1)bean定义,2)bean预先初始化,3)准备 ,4)撤销这个bean。bean定义很是简单,一个bean至少需要一个id(或者是name)属性和一个class属性(attribute)。bean的属性是id是一个真正的XML ID,这就意味在一个XML文件它是唯一的。要想给bean添加别名你可以指定name属性。这个属性允许使用一个或多个id,用逗号或分号隔开。在配置bean时,使用一个id属性是推荐和首选的方法。第2个肯定就是class属性了。在其它应用框架一样,bean定义允许的属性和子元素是由spring-beans.dtd来规定的。关于bean属性定义,很多地方都可以查得到就不在这里描述了。我们还是细细说说bean的生命周期。
和EJB的生命周相比,在Spring下的BeanFacotry还是简单多了;曾培训的时候用过EJB,但并未做过项目。感觉EJB用起来很是啰嗦,实现许多与bean有关的生命周期。而在Spring中你可以通过配置把类组装起来,不需要从其它类继承或去实现接口。我是需要用init-method和destory-method两个属性管理证明周期即可。bean的依赖关系是指这个进行操作时所依赖的一种属性。依赖指向了其它的类,而不是简单的数值。我们一般用用<ref>指定依赖关系,指向dataSource的<ref>使用一个locle属性指向一个dataSource bean。除local外,还有其它几种指定所依赖的bean的途径,从XML中或已经导入ApplicationContext的XML查找依赖的Bean。或是从另一个XML文件中查找依赖的bean,当然该属性是必是一个XML IDREF。还有一种是从当前XML文件中查找依赖的bean,而不当前XML文件中进行搜索。
在预初始化bean中,有几个重要步骤:Autowiring,这个方法我们基本没用过。因为专家建议也不要使用该方法,就算用也要以byname的方式,让beanname和beanid同步。检测bean检测属性设置,可以用dependencycheck方法。一个良好结构的bean都有默认值none,意味着依赖性检测没有激活,可以为每个bean开启它.set()方法就是将依赖关系注射到一个类中。这些属性可以是配置在context文件中,可以是常用的类型(也就是int,或是boolean),对象类型(Long,Integer),null值或是其它对象的引用。在初始化方法调用后,BeanFactory检查那些实现BeanFactoryAware和BeanNameAware接口的类。这些接口为各bean找出其来源和自身的更多信息提供了一种途径。BeanFactoryAware有一种方法:setBeanFactory()。如果有一个bean实现了这个接口,就会引用BeanFactory来查找bean。当然如果让一个bean能够找到bean id的话,就需要使用BeanNameAware接口的setBeanName方法。当然,如果你在xml用ref设置了这种依赖关系的话就不需要访问beanFactory。
初始化处理后,常用init-method方法来配置bean。当然实现InitallizngBean接口的方法也可以,该接口只有一个方法叫afterPropertiesSet()。当bean完成预初始化,所有设置的方法都已经被调用,bean进行一个就绪状态。你的应用程序可以按需获取和使用这些bean。最后是就是销毁期:这些Bean先实现DisposableBean的destory()方法,结束自己的生命周期。