Spring Bean管理(XML方式)之Bean实例化的三种方式

我们把类交给Spring,然后Spring帮我们生成这个类的实例,那么它是如何生成的呢?

Bean实例化的三种方式

  • 使用类构造器实例化(默认无参数)
  • 使用静态工厂方法实例化(简单工厂模式)
  • 使用实例工厂方法实例化(工厂方法模式)

编码演示

方式一:采用无参数的构造方法的方式

新建一个包com.jikewenku.ioc.demo2,新建一个bean1.java

package com.jikewenku.ioc.demo2;

/**
 * Bean的实例化的三种方式:采用无参数的构造方法的方式
 */
public class Bean1 {
    public Bean1(){
        System.out.println("Bean1被实例化了...");
    }
}

在配置文件中做相应的配置


    

然后写一个测试类SpringDemo2

@Test
public void demo1(){
    // 创建工厂
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 通过工厂获得类的实例:
    Bean1 bean1 = (Bean1)applicationContext.getBean("bean1");
}

运行结果,显示bean1被实例化。说明它是调用了里面的构造方法。

Spring Bean管理(XML方式)之Bean实例化的三种方式

方式二:静态工厂实例化方式

新建一个类Bean2

package com.jikewenku.ioc.demo2;

/**
 * Bean的实例化三种方式:静态工厂实例化方式
 */
public class Bean2 {

}

再创建一个类Bean2Factory

package com.jikewenku.ioc.demo2;

/**
 * Bean2的静态工厂
 */
public class Bean2Factory {

    public static Bean2 createBean2(){
        System.out.println("Bean2Factory的方法已经执行了...");
        return new Bean2();
    }

}

接下来添加配置信息



在SpringDemo2中编写测试用例

@Test
public void demo2(){
    // 创建工厂
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 通过工厂获得类的实例:
    Bean2 bean2 = (Bean2)applicationContext.getBean("bean2");
}

运行程序,当我们一执行的时候,bean1也会实例化,因为这个工厂只要一加载配置文件,会把配置文件中的类都实例化,所以构造方法也会执行,所以运行demo2,bean1也会实例化。

Spring Bean管理(XML方式)之Bean实例化的三种方式

方式三:实例工厂实例化

创建一个Bean3

package com.jikewenku.ioc.demo2;

/**
 * Bean的实例化三种方式:实例工厂实例化
 */
public class Bean3 {

}

创建Bean3Factory

package com.jikewenku.ioc.demo2;

/**
 * Bean3的实例工厂
 */
public class Bean3Factory {
    public Bean3 createBean3(){
        System.out.println("Bean3Factory执行了...");
        return new Bean3();
    }
}

修改配置文件


 
 

再来测试一下

@Test
public void demo3(){
    // 创建工厂
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 通过工厂获得类的实例:
    Bean3 bean3 = (Bean3)applicationContext.getBean("bean3");
}

运行程序,我们会发现实例工厂也被执行了。

Spring Bean管理(XML方式)之Bean实例化的三种方式

正常情况下,我们都会采用默认的方式,也就是无参方式。

本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Spring Bean管理(XML方式)之Bean实例化的三种方式
分享到:
赞(0)

评论抢沙发

评论前必须登录!