1、bean对象的作用域:
在xml文件中可以通过scope属性设置当前bean的作用域
singleton:单例模式,从容器中获取到的都是同一个对象,默认的作用域。
prototype:多例模式,从容器中获取到的对象每一次都是新创建的。
创建时间:
singleton:在创建IOC容器完成之前此对象就已经被创建
prototype:每次需要使用到此对象才会被创建
在spring4.x中还有两种作用域:
request:每次发送请求都有一个新的对象
session:每一次会话都会有一个新对象
在5版本被淘汰
<bean id="person3" class="com.msb.bean.Person" scope="singleton"></bean>
<bean id="person4" class="com.msb.bean.Person" scope="prototype"></bean>
2、实例工厂
(1)静态工厂:
PersonStaticFactory.class
package com.msb.factory;
import com.msb.bean.Person;
/**
* 静态工厂类
*/
public class PersonInstanceFactory {
public static Person getInstance(String name){
Person person = new Person();
person.setId(1);
person.setName(name);
person.setAge(11);
return person;
}
}
ioc.xml
<!--利用静态工厂创建对象-->
<!--
通过factory-method来调用静态方法
使用constructor-arg标签来赋值
-->
<bean id="personStaticFactory" class="com.msb.factory.PersonStaticFactory" factory-method="getInstance">
<constructor-arg value="11"></constructor-arg>
</bean>
(2)实例工厂
PersonInstanceFactory.class
package com.msb.factory;
import com.msb.bean.Person;
/**
* 实例工厂类
*/
public class PersonInstanceFactory {
public Person getInstance(String name){
Person person = new Person();
person.setId(1);
person.setName(name);
person.setAge(11);
return person;
}
}
ioc.xml
<!--
实例工厂,先创建工厂实例,通过定义的id去调用factory-bean属性,从而调用工厂方法
factory-bean:表示具体工厂类的实例
factory-method:表示工厂实例的方法
-->
<bean id="instanceFactory" class="com.msb.factory.PersonInstanceFactory"></bean>
<bean id="person5" class="com.msb.bean.Person" factory-bean="instanceFactory" factory-method="getInstance">
<constructor-arg value="lisi"></constructor-arg>
</bean>
3、继承FactoryBean来创建bean
创建继承FactoryBean的类对象
MyFactoryBean.class
package com.msb.factory;
import com.msb.bean.Person;
import org.springframework.beans.factory.FactoryBean;
public class MyFactoryBean implements FactoryBean<Person> {
/**
* @return 返回获取的bean对象
* @throws Exception
*/
public Person getObject() throws Exception {
Person person = new Person();
person.setId(1);
person.setName("wangwu");
return person;
}
/**
* @return 返回获取的bean类型
*/
public Class<?> getObjectType() {
return null;
}
/**
* @return 判断当前bean是否为单例的
*/
public boolean isSingleton() {
return false;
}
}
ioc.xml
<!--创建继承FactoryBean的MyFactoryBean对象-->
<bean id="myFactoryBean" class="com.msb.factory.MyFactoryBean"></bean>