一、Bean的实例化
1.Spring 使用默认的构造方法,也就是没有参数的构造函数来建立Bean的实例。
2.Spring也可以使用设置静态工厂的方法来取得Bean实例。"factory-method"
3.也可以使用某个工厂Bean实例的工厂方法来取得Bean实例。"factory-bean","factory-method"
二、Bean的scope
在Spring中,从BeanFactory或ApplicationContext取得的实例被默认为Singleton,也就是默认每一个Bean名称只维持一个实例。scope属性预设是"singleton",通过将其设置为"prototype",使得每次指定名称来取得Bean时,都会产生一个新的实例。也可以设置"singleton"属性为true或false,来设置以Singleton的方式产生实例,这种方式主要与以前的版本兼容而保留的。
Spring的Singleton主要是针对"一个IoC容器维持一个Bean实例"而言的。与设计模式上谈到的Singleton不同,设计模式上谈到的Singleton,是指对每个ClassLoader所载入的类产生一个实例。
Spring2.0中,scope除了可以设置"singleton" 与"prototype"之外,针对Web应用程序环境,还可以设置"request"、"session"与"globalSession",分别表示请求阶段、会话阶段与基于Portlet的Web应用程序会话阶段。
三、Bean的生命周期
如果使用BeanFactory,只有在使用getBean()方法真正取得Bean时,才会做实例化的动作。
如果使用ApplicationContext,则会预先针对Bean定义文件的内容,将所有的Bean实例化。当然如果你想要延迟加载功能,则可以在<bean>上设置"lazy-init"属性为true。
ApplicationContext 中Bean实例的销毁与BeanFactory中实例的销毁是一样的吗,都是设置destroy-method吗?