Spring学习之路(二):Spring工厂类简介与Bean的三种实例化方式

本文介绍了Spring工厂类,包括BeanFactory和ApplicationContext的区别,以及ApplicationContext的两种实现。详细阐述了Spring中Bean的三种实例化方法:构造器、静态工厂和实例工厂,并通过代码示例展示了其实现过程。最后,总结了Spring不采用延时加载的优点及IOC容器在处理依赖关系上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring工厂类介绍

在这里插入图片描述
如图,这是Spring内部完整的工厂类继承关系图,其中有四个类需要了解:

  • BeanFactory 这个接口已经被淘汰,不被推荐使用。这是旧版的Spring提供的工厂接口,功能并没有完善,碍于当时硬件条件,内存资源不足,所以BeanFactory 使用延时加载的模式,对象只有在被使用时才会被创建。
  • ApplicationContext 这个是现版本Spring使用的工厂接口,继承于BeanFactory ,有着比BeanFactory 更丰富的功能,如国际化等,且重要的是,ApplicationContext 创建bean的时机与BeanFactory 不一样,ApplicationContext 在程序启动时就会加载配置文件,创建其中所有单例模式的对象(Spring默认创建的对象就是单例)。
  • ClassPathXmlApplication 这是ApplicationContext 的一个实现,会加载类路径下的Spring配置文件。
  • FileSystemXmlApplication 这是ApplicationContext 的另一个实现,会加载本地文件系统给定路径下的Spring配置文件。

二、SpringBean的三种实例化

Spring对于Bean的管理有两种方式:注解和xml配置文件,现在以xml方式演示在Spring中Bean的三种实例化方式。

1. 使用构造器实例化Bean
  • Bean代码
    public class Bean1 {
    
    public Bean1(){
       System.out.println("通过无参构造器实例化Bean1");
       }
    }
    
  • Spring配置文件配置
    	<!-- 配置通过无参构造实例化Bean-->
      <bean id="bean1" class="com.spring.demo1.Bean1"/>
    
  • 测试代码
    public class test {
       @Test
       public void testBean1(){
           ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
           Bean1 bean1 = (Bean1)ac.getBean("bean1");
       }
    }
    
  • 测试结果
    在这里插入图片描述
2. 使用静态工厂实例化Bean
  • Bean代码
    public class Bean2 {
    
      public Bean2(){
      System.out.println("bean2已经被实例化");
      }
    }
    
  • 静态工厂代码
    public class Bean2Factory {
    
    public static Bean2 getBean2(){
      System.out.println("静态工厂方法已经被调用");
      return new Bean2();
      }
    }
    
  • Spring配置文件配置
    <!-- 配置通过静态工厂实例化Bean-->
    <bean id="bean2" class="com.spring.demo1.Bean2Factory" factory-method="getBean2"/>
    
  • 测试代码
     @Test
      public void testBean2(){
          ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
          Bean2 bean2 = (Bean2)ac.getBean("bean2");
      }
    
  • 测试结果
    在这里插入图片描述
3.使用实例工厂实例化Bean
  • Bean代码
    public class Bean3 {
    
       public Bean3(){
      	System.out.println("Bean3已经被实例化");
      }
    }
    
  • 实例工厂代码
    public class Bean3Factory {
    
       public Bean3 getBea3(){
          System.out.println("实例工厂的方法被调用");
        	  return new Bean3();
      }
    }
    
  • Spring配置文件配置
    <!-- 配置通过实例工厂实例化Bean-->
    <bean id="bean3Factory" class="com.spring.demo1.Bean3Factory"/>
    <bean id="bean3"  factory-bean="bean3Factory" factory-method="getBea3"/>
    
  • 测试代码
     @Test
      public void testBean3(){
          ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
          Bean3 bean3 = (Bean3)ac.getBean("bean3");
      }
    
  • 测试结果
    在这里插入图片描述
    第三种方法我们发现,Bean3的创建依赖于工厂的创建,但是我们在测试工程中并不需要手动实例化工厂,因为Spring已经帮我们实例化了,这也是把Spring IOC中的一个重要功能,Spring会依据Bean与Bean之间的依赖关系自动为我们创建好所需的Bean。

三、总结

通过了解Spring工厂类的结构,可以知道Spring现在已经不再采用延时加载的方式创建JavaBean了,不采用延时加载,使得Spring具有更高的响应。在Spring三种实例化Bean的方式中以第一种方式使用得最多,可以发现,当我们创建的Bean需要依赖其他Bean的生成时如果正确配置了关系,那么Spring会将所依赖的Bean创建好,这也是IOC很重要的功能之一。感谢您的阅读,如有错请不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值