1.bean的 三种创建方式
2.bean对象的作用范围
3.bean对象的生命周期
bean的三种创建方式:
第一种使用默认构造函数创建:
在spring配置文件中使用bean标签,配置上id和class属性后,不再添加其他属性就是使用默认构造函数创建,如果class指定的类中没有默认构造函数则创建失败。
默认构造方法:
public AccountServiceImpl(){
System.out.println("对象创建了额");
}
配置文件中bean标签:
<bean>id="accountService"class="com.itheima.service.impl.AccountServiceImpl"></bean>
第二种使用某个类中的方法创建:
在spring配置文件中使用bean标签将创建需要对象的类利用id和class属性进行配置,然后在次使用bean标签,利用id属性,factory-bean和factory-method属性进行配置。factory-bean属性填写上一个bean标签的id,factory-method填写上一个bean标签class属性中用于创建需要对象的方法。
创建对象的类:
public class InstanceFactory {
public IAccountService getAccountService(){
return new AccountServiceImpl();
}
}
配置文件中bean标签:
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"> </bean>
<bean id="accountService" factory-bean="instanceFactory" factory- method="getAccountService"></bean>
第三种使用某个类中的静态方法创建:
和第二种方法相似,只不过是改成了静态方法,标签的使用有一定差异。只用一个bean标签配置id属性,class属性写静态方法类的路径,factory-method属性写静态方法名。
静态方法类:
public class StaticFactory {
public static IAccountService getAccountService(){
return new AccountServiceImpl();
}
}
配置文件中的bean标签:
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory- method="getAccountService"></bean>
2.bean的作用范围:
bean的作用范围调整是通过bean标签中的scope属性,这个属性指定了bean的作用范围,它的取值有:
singleton:单例模式也是默认值
prototype:多例模式
request:作用于web应用的请求范围
session:作用域web应用的会话范围
global-session:作用域集群环境的会话范围或者全局会话范围,当不是集群环境时就是session
这是最后一种global-session的应用场景,当用户对服务器发出请求,因为有多台服务器,需要经过反向代理设备进行调度,但是很有可能在第一台服务器响应第一次请求发送验证码之后,验证验证码的时候被调度到了另一台服务器,这个时候就需要用global-session来保证验证码在全局都可以使用
3.bean的生命周期
单例对象
出生:当容器创建时对象出生
活着:容器还在对象还活着
死亡:容器死亡对象死亡
多例对象
出生:当我们使用对象时spring框架为我们创建
活着:对象在使用过程中一直活着
死亡:当对象长时间不使用并且没有其他对象引用时由垃圾回收器回收