Spring的IOC学习3(bean的作用域、利用工厂模式创建bean对象以及继承FactoryBean来创建bean)

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值