• spring学习(03)之bean实例化的三种方式


    bean实体例化的三种方式

    在spring中有三中实例化bean的方式:

    一、使用构造器实例化;(通常使用的一个方法,重点)

    二、使用静态工厂方法实例化;

    三、使用实例化工厂方法实例化

    第一种、使用构造器实例化;

    这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在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">
    
        <bean id="user" class="cn.lmn.ioc.User"></bean>
    
    </beans>

     id是对象的名称,class是要实例化的类。

    在这个类里面还要有个无参的构造,不然会出现异常

    第二种 使用静态工厂创建

    (1)创建静态的方法,返回类对象

    package cn.lmn.bean;
    
    public class Bean2Factory {
        //静态方法,返回Bean2对象
        public static Bean2 getBean2(){
            return new Bean2();
        }
    }
    <?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">
    
        <!-- <bean id="user" class="cn.lmn.ioc.User"></bean> -->
        <!-- 使用静态工厂创建对象 -->
        <bean id="bean2" class="cn.lmn.bean.Bean2Factory" factory-method="getBean2"></bean>
    </beans>

    最后测试一下

     1 package cn.lmn.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import cn.lmn.bean.Bean2;
     8 import cn.lmn.ioc.User;
     9 
    10 public class TestIOC {
    11     @Test
    12     public void testUser() {
    13         // 1加载spring的配置文件,创建对象
    14         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    15         // 2得到配置创建的对象
    16     //    User user = (User) context.getBean("user");
    17         Bean2 bean2 = (Bean2) context.getBean("bean2");
    18         System.out.println(bean2);
    19         
    20     }
    21 }

    第三种 使用实例工厂创建

    (1)创建不是静态的方法,返回类对象

    package cn.lmn.bean;
    
    public class Bean3Factory {
        //普通的方法,返回的是Bean2的对象
        public Bean3 getBean3(){
            return new Bean3();
        }
    }
    <?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">
    
        <!-- <bean id="user" class="cn.lmn.ioc.User"></bean> -->
        <!-- 使用静态工厂创建对象 -->
        <!-- <bean id="bean2" class="cn.lmn.bean.Bean2Factory" factory-method="getBean2"></bean> -->
        <!-- 使用实例工厂创建对象 -->
        <!-- 创建工厂对象 -->
        <bean id="bean3Factory" class="cn.lmn.bean.Bean3Factory"></bean>
        <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    </beans>

    最后测试一下

     1 package cn.lmn.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import cn.lmn.bean.Bean3;
     8 
     9 public class TestIOC {
    10     @Test
    11     public void testUser() {
    12         // 1加载spring的配置文件,创建对象
    13         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    14         // 2得到配置创建的对象
    15     //    User user = (User) context.getBean("user");
    16         Bean3 bean3 = (Bean3) context.getBean("bean3");
    17         System.out.println(bean3);
    18         
    19     }
    20 }
  • 相关阅读:
    高阶函数
    如何理解data URL?
    JS对象的创建方式
    数组中的map方法
    奇怪的 Javascript
    什么场景不适合箭头函数
    协方差矩阵学习[转载]
    PAT 1140 Look-and-say Sequence [比较]
    PAT 1089 Insert or Merge[难]
    PAT 1096 Consecutive Factors[难]
  • 原文地址:https://www.cnblogs.com/limn/p/8406969.html
Copyright © 2020-2023  润新知