Spring学习3-bean对象

bean对象的三种创建方式

通过调用构造函数来创建bean对象

默认情况下,当我们在spring的配置文件中写了一个bean标签并提供了class属性,spring就会调用默认构造函数创建对象。
如果没有构造函数,则创建失败。

1
2
<!-- 配置业务层对象 -->
<bean id="accountService" class="com.gsynf.service.impl.AccountServiceImpl"></bean>
1
2
// Client.java
IAccountService as = (IAccountService) ac.getBean("accountService");

通过静态工厂创建bean对象

工厂类中提供一个静态方法,可以返回要用的bean对象。

1
2
<!-- 静态工厂创建 -->
<bean id="staticAccountService" class="com.gsynf.factory.StaticBeanFactory" factory-method="getBean"></bean>
1
2
3
4
5
6
// src/com/gsynf/factory/StaticBeanFactory.java
public class StaticBeanFactory {
public static IAccountService getBean() {
return new AccountServiceImpl();
}
}
1
2
// Client.java
IAccountService as = (IAccountService) ac.getBean("staticAccountService");

通过实例工厂创建bean对象

工厂类中提供一个普通方法,可以返回要用的bean对象。

1
2
3
<!-- 实例工厂创建 -->
<bean id="instanceFactory" class="com.gsynf.factory.InstanceBeanFactory"></bean>
<bean id="instanceAccountService" factory-bean="instanceFactory" factory-method="getBean"></bean>
1
2
3
4
5
6
// src/com/gsynf/factory/InstanceBeanFactory.java
public class InstanceBeanFactory {
public IAccountService getBean() {
return new AccountServiceImpl();
}
}
1
2
// Client.java
IAccountService as = (IAccountService) ac.getBean("instanceAccountService");

bean对象的作用范围

它是可以通过配置的方式指定的。配置的属性:bean标签的scope属性。属性的取值:

  • singleton:单例范围,默认值;
  • prototype:多例对象;
  • request:请求范围,也就是只在该次请求和请求的转发中可用,WEB项目中,将Spring创建的bean对象存入到request域中;
  • session:会话范围,也就是在一次会话的范围中,WEB项目中,将Spring创建的bean对象存入到session域中;
  • global-session:全局会话范围;

bean对象的生命周期

生命周期要具体分为单例对象和多例对象:

  • 单例对象:

    • 出生:容器创建,对象出生;

    • 活着:容器存在,对象就一直可用;

    • 死亡:容器销毁,对象消亡;

  • 多例对象:

    • 出生:每次使用时,容器会创建对象;
    • 活着:只要对象在使用过程中,就一直活在;
    • 死亡:当对象长时间不用并且也没有其他对象引用时,由java的垃圾回收器回收;

:转载文章请注明出处,谢谢~