spring-第七章 bean的实例化

spring


文章目录

  • spring
  • 前言
  • 1.构造方法实例化
  • 2.简单工厂模式实例化
    • 2.1定义Bean
    • 2.2创建工厂类
    • 2.3xml文件配置
    • 2.4测试
  • 3.factory-bean实例化
    • 3.1定义Bean
    • 3.2创建工厂类
    • 3.3xml配置文件
    • 3.4测试
  • 4.FactoryBean接口实例化
    • 4.1说明
    • 4.2使用
      • 4.2.1定义Bean
      • 4.2.2实现FactoryBean接口创建工厂类
      • 4.2.3配置文件
  • 5.BeanFactory和FactoryBean的区别
    • 5.1BeanFactory
    • 5.2FactoryBean
  • 6.补充
  • 总结


前言

前面在学习时我们说过,bean是在我们获取容器时通过调用构造方法创建的。
但其实spring还有其他方法可以完成bean的实例化,我们上一章提到过工厂模式,这也是spring中创建bean的方法。
常见的实例化方式有:

  • 构造方法实例化
  • 简单工厂模式实例化
  • factory-bean实例化
  • FactoryBean接口实例化

1.构造方法实例化

构造方法实例化没什么特殊设置,只要正常的在配置文件中设置bean即可,这也是默认的实例化方式。

2.简单工厂模式实例化

2.1定义Bean

这个bean是我们客户端实际要用的东西,也是具体产品
请添加图片描述

2.2创建工厂类

创建工厂类,且里面有get方法返回具体产品对象(bean对象)
请添加图片描述

2.3xml文件配置

请添加图片描述

  • class属性是指定工厂类而不是产品类
  • 使用fctory-method来指定要用工厂类的哪个方法来获取对象
  • 最后实际获取的bean对象就是我们工厂方法中返回的那个对象

2.4测试

请添加图片描述

正常获取到对象

3.factory-bean实例化

3.1定义Bean

这个Bean是我们实际想要的对象,就是具体产品类
请添加图片描述

3.2创建工厂类

这里的具体工厂类与前中方式不同的是,提供普通方法来获取bean对象
请添加图片描述

3.3xml配置文件

请添加图片描述

  • 需要把工厂类也管理成bean,因为需要具体的工厂类对象来调用方法
  • factory-bean属性指定要使用的工厂类的bean,值是工厂bean对应id
  • factory-method属性指定要使用工厂类中的哪个方法来创建产品对象

3.4测试

请添加图片描述

4.FactoryBean<>接口实例化

4.1说明

使用第三中实例化方法,我们每次都要自定义工厂类和工厂方法,而且需要在配置文件中把工厂类管理成bean,指定要用来获取具体产品对象的方法。但这个步骤是固定的,每次都执行这样的操作比较繁琐。
所以spring提供了默认的工厂接口,我们使用该接口创建工厂类可以帮省略一些配置方面的步骤。

4.2使用

4.2.1定义Bean

package com.powernode.spring6.bean;  
  
 
public class Person {  
}

4.2.2实现FactoryBean接口创建工厂类

package com.powernode.spring6.bean;  
  
import org.springframework.beans.factory.FactoryBean;  
  

public class PersonFactoryBean implements FactoryBean {  
  
    @Override  
    public Person getObject() throws Exception {  
        return new Person();  
    }  
  
    @Override  
    public Class getObjectType() {  
        return null;  
    }  
  
    @Override  
    public boolean isSingleton() {  
        // true表示单例  
        // false表示原型  
        return true;  
    }  
}
  • 实现getObject()方法,作为返回具体产品的方法
  • 可以改变isSingleton()方法的值来决定bean是单例模式或原型模式

4.2.3配置文件

<bean id="personBean" class="com.powernode.spring6.bean.PersonFactoryBean"/>
  • class属性指定工厂类,最终返回具体产品对象
  • 不需要手动配置工厂类为bean也不需要手动选择get方法

5.BeanFactory和FactoryBean的区别

5.1BeanFactory

Spring IoC容器的*对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。

BeanFactory是工厂

5.2FactoryBean

FactoryBean:它是一个Bean,是一个能够辅助Spring实例化其它Bean对象的一个Bean。

在Spring中,Bean可以分为两类:

  • 第一类:普通Bean
  • 第二类:工厂Bean(记住:工厂Bean也是一种Bean,只不过这种Bean比较特殊,它可以辅助Spring实例化其它Bean对象。)

6.补充

使用工厂模式实例化Bean时,如果需要对Bean进行注入,则有两种方式

  • 正常地通过xml配置文件进行set注入
  • 在工厂方法中自己调用对象的set方法进行注入,最后方法返回注入好的对象

注意:

  • 如果想在工厂方法中手动注入引用类型的属性,则该属性对象也要自己创建,无法从容器中取出(因为还没创建出来)。

例如:
请添加图片描述


总结

本章介绍springIOC是如何实例化bean的。

上一篇:基于SSM电子资源管理系统的设计


下一篇:全面掌握MySQL:从安装到优化的完整指南(适用于Windows系统)