Bean的三种实例化方式

Bean的三种实例化方式:
1、无参构造器方法 2、静态工厂的方法 3、实例工厂的方法

Spring配置文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--UserService的创建权交给了Spring-->
    <bean id = "userService"  class="com.imooc.ioc.demo1.UserServiceImpl">
        <property name="name" value="李雪"/>
    </bean>

    <!--Bean的实例化的三种方式-->
    <!--第一种:无参构造器的方法-->
    <bean id="bean1" class="com.imooc.ioc.demo2.Bean1"></bean>
    <!--Bean的实例化的三种方式-->
    <!--第二种:静态工厂的方法-->
    <bean id="bean2" class="com.imooc.ioc.demo2.Bean2Factory" factory-method="createBean2"></bean>
    <!--第三种:实例工厂方式-->
    <bean id="bean3Factory" class="com.imooc.ioc.demo2.Bean3Factory"/>
    <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3" />
</beans>

测试类

package com.imooc.ioc.demo2;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

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

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

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

package com.imooc.ioc.demo2;

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

运行后显示:Bean1被实例化

第二种静态工厂实例化方式

package com.imooc.ioc.demo2;

/**
 * Bean的实例化三种方式:静态工厂实例化方式
 */
public class Bean2 {
}
package com.imooc.ioc.demo2;

/**
 * Bean2的静态工厂
 */
public class Bean2Factory {
    public static Bean2 createBean2(){
        System.out.println("Bean2Factory方法已经执行");
        return new Bean2();
    }
}

运行后显示:Bean2Factory方法已经执行

第三种实例工厂实例化

package com.imooc.ioc.demo2;

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

}
package com.imooc.ioc.demo2;

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

运行后显示:Bean3的工厂被执行了

在正常的情况下都会采用默认的方式:即无参数的构造方法的方式,如果类的构造特别复杂,则会采用第二种或第三种方式,OK~以上就是关于Bean的实例化的三种方式。希望对大家有所帮助!

猜你喜欢

转载自blog.csdn.net/weixin_43097260/article/details/86644176