spring学习之---创建Bean的三种方式

1.使用构造器创建Bean实例

如果不采用构造注入,spring底层会调用Bean类的无参构造器来创建实例,因此要求该Bean提供无参构造器,在这种情况下,class元素时必需的,class属性的值就是Bean实例的实现类,spring对Bean实例的所有属性执行默认初始化,即所有基本类型的值初始化为0或false;所有的引用类型的值初始化为null。
接下来,BeanFactory会根据配置文件决定依赖关系,先实例化被依赖的Bean实例,然后为Bean注入依赖关系,最后将一个完整的Bean实例返回给程序。
如果采用构造注入,spring容器将使用带对应参数的构造器来创建Bean实例,spring调用构造器传入的参数即可用于初始化Bean的实例变量,最后也将一个完整的Bean实例返回给程序。

2.使用静态工厂方法创建Bean

使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是Bean实例的实现类,而是静态工厂类,spring通过该属性知道由哪个工厂类来创建Bean实例。还需要使用factory-method属性来指定静态工厂方法。
如果静态工厂方法需要参数,则使用<constructor-arg.../>元素传入。

    public class Dog{
        private String msg;
        setter方法
        public void testBeing(){
            System.out.println(msg + "狗爱吃肉");
        }
    }

    public class Being Factory{
        public static Being getBeing(){
            return new Dog();
        }
    }

    <bean id="dog" class="...BeingFactory" factory-method="getBeing">
        <property name="msg" value="小狗狗"/>
    </bean>

使用静态工厂方法创建实例时必须提供工厂类,工厂类包含产生实例的静态工厂方法。

3.调用实例工厂方法创建Bean

配置静态工厂方法使用class指定静态工厂类,而配置实例工厂方法则使用factory-bean指定工厂实例。
使用实例工厂方法时,配置Bean实例的<bean.../>元素无须class属性,因为spring容器不再直接实例化该Bean,spring容器仅仅调用实例工厂的工厂方法,工厂方法创建Bean实例。

    public class American{
        public String sayHello(String name){
            return name + ",Hello";
        }
    }

        public class PersonFactory{
            public American getAmerican(){
                return new American();
            }
        }

    <bean id="personFactory" class="...PersonFactory"/>
    <bean id="american" factory-bean="personFactory" factory-method="getAmerican">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值