前面讲到了Spring创建对象Spring项目搭建,如何通过Spring创建对象,在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、很清晰的可以看到结果中无参构造方法里面的代码被执行了

springboot 实例化对象 spring三种实例化方式_构造方法

第二种:通过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对象

springboot 实例化对象 spring三种实例化方式_开发语言_02

第三种:通过静态工厂

        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、代码获取查看

springboot 实例化对象 spring三种实例化方式_构造方法_03

第四种:通过实例工厂创建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、查看效果

springboot 实例化对象 spring三种实例化方式_开发语言_04

总结:

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