我们这一节学习的bean.xml配置参数,主要用于bean对象的创建,控制bean对象的作用范围以及生命周期。
创建Bean的三种方式
1.使用默认构造函数创建
我们在之前的使用的bean创建方式为下面:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id = "accountService" class="com.lujuan.service.impl.AccountService"> </bean> </beans>
这就是bean创建但第一种方式,使用默认构造函数进行创建。方法是在spring但配置文件中使用bean标签,配以id和class属性,切没有其他但属性和标签。(id属性来定义我们使用时所需要使用的名称,class为本项目中的类文件)。使用这中创建方式创建时,如果类没有默认构造函数,那么bean对象将无法创建。
2.使用工厂中的普通方法创建
这种方法其实是使用类中的普通方法创建对象,并放入spring容器中
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id = "accountService" class="com.lujuan.service.impl.AccountService"> </bean> <bean id = "ordinaryFactory" class="com.lujuan.factory.OrdinaryFactory"> </bean> <bean id = "accountService2" factory-bean="ordinaryFactory" factory-method="init"> </bean> <bean id = "accountService3" class="com.lujuan.factory.StaticFactory" factory-method="init"> </bean> </beans>
3.使用工厂中的静态方法进行创建
这种方法其实是使用类中的static方法创建对象,并放入Spring容器中
<bean id = "accountService3" class="com.lujuan.factory.StaticFactory" factory-method="init"> </bean>
在方法2和方法3中,主要是factory-bean,factory-method这两个bean属性起到了作用,多用于使用外部的jar包进行bean对象创建的场景下。
Bean 对象的作用范围
在这里主要是bean标签下的scope起到了作用。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id = "accountService" class="com.lujuan.service.impl.AccountService" scope="prototype"> </bean> </beans>
scope的取值有5种类:
- singleton 单例的(也是默认值),每次获取bean对象时,是同一个对象
- prototype 多例的,每次获取bean对象时,获取的是不同的对象
- request 作用于web应用的请求范围
- session 作用于web请求的一次会话
- global-session 作用于集群环境下的会话范围,非集群环境时会变为session
Bean 对象的生命周期
在这一部分我们要学习bean标签中的两个行的属性:init-method和destroy-method,主要用来指定bean对象创建和销毁时,调用的类中的方法的名称,可以让我们当需要的时候执行特定的创建方法和销毁方法。
<bean id = "accountService" class="com.lujuan.service.impl.AccountService" scope="singleton" init-method="saveAccount" destroy-method="saveAccount"> </bean>对于单例和多例的bean对象具有不同的生命周期,我们主要关注的是对象的出生、存活和死亡。
- 单例bean:在容器创建的时候出生,容器存在她就存在,容器销毁的时候,他就被销毁。
- 多例bean:在对象被使用的时候由spring帮我们创建,对象一直使用就一直存在,随后由jvm垃圾回收的时候被销毁。(但不再使用且不被其他对象引用时)
总结
截止目前我们学习了bean标签中 factory-bean,factory-method;scope;init-method,destroy-method这些属性使用,分别用于bean对象的创建,bean作用范围控制,以及bean对象生命周期管理。