06-Spring中的实例化方式有哪些

        前面讲到了Spring创建对象Spring项目搭建,如何通过Spring创建对象_小魏快起床的博客-CSDN博客,那么在Spring中创建对象方式有哪些呢,这个问题也是外面很多面试官会问到的问题,这里小魏就带各位看官进入了解一下

首先声明一共有4种:

        1、通过构造器实例化

        2、通过FactoryBean接口进行实例化

        3、通过静态工厂进行创建

        4、通过实例工厂创建bean

第一种:通过构造器方式实例化

        1、在Spring核心配置文件中配置一个bean

  <!--1、构造器方式实例化-->
    <bean id="animal" class="cn.xjxwc666.spring.Animal"></bean>

        2、我们去将实体类对象的无参构造方法进行改造一下,添加一句输出的代码

class Animal {
    private String name;
    private Integer age;

    public Animal() {
        System.out.println("动物类型执行了无参构造方法");
    }

    public Animal(String name, Integer age) {
        System.out.println("动物类型执行了有参构造方法");
        this.name = name;
        this.age = age;
    }
}

        3、在代码中通过getBean进行获取

public class SpringTest {

    @Test
    public void test() throws Exception{
        //创建一个容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //从容器中根据类型获取对象
        Animal bean = context.getBean(Animal.class);
        System.out.println(bean);

    }


}

        4、很清晰的可以看到结果中无参构造方法里面的代码被执行了

第二种:通过FactoryBean接口创建bean

        1、创建一个类实现FactoryBean,同时提供一个泛型【比如我要创建Animal对象,就提供Animal】,实现里面的2个方法

public class FactoryBeanMethod implements FactoryBean<Animal> {

	//决定创建一个什么样的对象
    @Override
    public Animal getObject() throws Exception {
        return new Animal("小狗",2);
    }

	//决定返回什么样的类型
    @Override
    public Class<?> getObjectType() {
        return Animal.class;
    }
}

        2、将此类交给spring管理

<!--2、FactoryBean接口实例化bean-->
<bean id="animal" class="cn.xjxwc666.spring.FactoryBeanMethod"></bean>

        3、代码之中进行获取,得到的是Animal对象

第三种:通过静态工厂

        1、创建静态工厂类,在工厂里面写一个静态方法获取类对象

public class StaticFactory {

    //写一个静态方法,创建一个Animal对象并返回
    public static Animal getInstance(){
        return new Animal("小狗",20);
    }

}

        2、将静态工厂交给Spring管理,同时配置此工厂创建对象的方法

<!--3、静态工厂实例化-->
<bean id="animal" class="cn.xjxwc666.spring.StaticFactory" factory-method="getInstance"></bean>

        3、代码获取查看

第四种:通过实例工厂创建bean

        1、创建实例工厂类

public class InstanceCreateBean {
    public Animal createBean(){
        return new Animal("小狗",22);
    }
}

        2、将此实例工厂类交给Spring管理

<!--4、实例工厂实例化-->
<bean id="instanceCreateBean" class="cn.xjxwc666.spring.InstanceCreateBean"></bean>
<bean id="getget" factory-bean="instanceCreateBean" factory-method="createBean"></bean>

        3、查看效果

总结:

        构造器实例化方式就是反射调用了无参构造方法,然后创建了一个对象,注意一定要有无参构造方法,如果有参构造方法添加上了,记得添加上无参构造,不然无参构造方法会被覆盖,其他另外三种都可以不依赖于无参构造方法,只是我们手动的指定调用什么样的构造方法,总的来说,第一种和第四种用的较多

分享就到这里了,到站下车了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值