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的。