手把手教你应用三种工厂模式在SpringIOC中创建对象实例【案例详解】

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

public String getFdj() {

return fdj;

}

public void setFdj(String fdj) {

this.fdj = fdj;

}

public String getYc() {

return yc;

}

public void setYc(String yc) {

this.yc = yc;

}

public String getJzName() {

return jzName;

}

public void setJzName(String jzName) {

this.jzName = jzName;

}

public String getFjzName() {

return fjzName;

}

public void setFjzName(String fjzName) {

this.fjzName = fjzName;

}

public Integer getPersonNum() {

return personNum;

}

public void setPersonNum(Integer personNum) {

this.personNum = personNum;

}

@Override

public String toString() {

return “AirPlane [fdj=” + fdj + “, yc=” + yc + “, jzName=” + jzName

  • “, fjzName=” + fjzName + “, personNum=” + personNum + “]”;

}

}

二、通过静态工厂方法创建Bean实例

======================

在Spring中调用静态工厂方法创建bean是将对象创建的过程封装到静态方法中。当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节。

在IOC容器中,通过静态工厂方法声明创建bean的步骤是:

  1. 首先在bean的class属性里指定静态工厂类的全类名,

  2. 同时在factory-method属性里指定工厂方法的名称。

  3. 最后使用元素为该方法传递方法参数。

接下来我们通过具体的代码来实现:

写一个静态工厂的实现类AirplaneStaticFactory,其中实现造飞机的静态方法getAirPlane(String jzName),传入一个参数代表机长姓名。并将创建的飞机对象返回。

package com.spring.factory;

import com.spring.beans.AirPlane;

/**

  • 飞机静态工厂

  • */

public class AirplaneStaticFactory {

/**

  • private String fdj;//飞机发动机

private String yc;//机翼长度

private String jzName;//机长名

private String fjzName;//副机长名

private Integer personNum;//乘客数

  • */

public static AirPlane getAirPlane(String jzName) {

AirPlane airPlane = new AirPlane();

airPlane.setFdj(“太行”);

airPlane.setYc(“190.2”);

airPlane.setJzName(jzName);

airPlane.setFjzName(“小刚”);

airPlane.setPersonNum(300);

return airPlane;

}

}

以上准备工作完成之后,就是通过静态工厂方法声明创建bean的实现了,按照上面的步骤在ioc容器中进行实现,

之后通过ioc容器的getBean()方法就可以获取到创建的bean对象。测试如下:

//***利用工厂方法来创建bean

ApplicationContext iocContext4 = new ClassPathXmlApplicationContext(“ioc4.xml”);

/**

  • 利用工厂方法创建实例

  • */

@Test

public void test10() {

// 利用静态工厂创建实例

AirPlane airPlane01 = (AirPlane)iocContext4.getBean(“airplane01”);

System.out.println(airPlane01);

// 利用实例工厂创建实例

AirPlane airPlane02 = (AirPlane)iocContext4.getBean(“airplane02”);

System.out.println(airPlane02);

// 利用自定义工厂创建实例

AirPlane airPlane03 = (AirPlane)iocContext4.getBean(“myFactoryBean”);

System.out.println(airPlane03);

}

测试结果:

三、通过实例工厂方法创建Bean实例

======================

实例工厂方法是将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。

实例工厂的实现步骤是

  1. 配置工厂类实例的bean

  2. 在factory-method属性里指定该工厂方法的名称

  3. 使用 construtor-arg 元素为工厂方法传递方法参数

首先我们先写一个实现实例工厂的类AirplaneInstanceFactory,在其中实现创建bean对象的实例方法getAirPlane(String jzName),

package com.spring.factory;

import com.spring.beans.AirPlane;

/**

  • 飞机实例工厂

  • */

public class AirplaneInstanceFactory {

public AirPlane getAirPlane(String jzName) {

AirPlane airPlane = new AirPlane();

airPlane.setFdj(“太行”);

airPlane.setYc(“190.2”);

airPlane.setJzName(jzName);

airPlane.setFjzName(“小刚”);

airPlane.setPersonNum(300);

return airPlane;

}

}

之后在IOC容器中配置实现工厂类的bean,指明是将哪一个实例工厂类实例化的。

现在就是将bean对象进行实例化的过程了,在IOC容器中,我们创建一个bean实例,调用实例工厂中的工厂方法,来对bean进行实例化,在这里我们需要使用factory-method属性里指定该工厂方法的名称,同时使用 construtor-arg 元素为工厂方法传递方法参数。具体实现是这样的:

<bean id=“airplane02” class=“com.spring.beans.AirPlane”

factory-bean=“airplaneInstanceFacatory” factory-method=“getAirPlane”

现在通过实例工厂创建bean对象的过程就结束了,通过获取到ioc容器中的bean对象进行测试:

//***利用工厂方法来创建bean

ApplicationContext iocContext4 = new ClassPathXmlApplicationContext(“ioc4.xml”);

/**

  • 利用工厂方法创建实例

  • */

@Test

public void test10() {

// 利用静态工厂创建实例

AirPlane airPlane01 = (AirPlane)iocContext4.getBean(“airplane01”);

System.out.println(airPlane01);

// 利用实例工厂创建实例

AirPlane airPlane02 = (AirPlane)iocContext4.getBean(“airplane02”);

System.out.println(airPlane02);

// 利用自定义工厂创建实例

AirPlane airPlane03 = (AirPlane)iocContext4.getBean(“myFactoryBean”);

System.out.println(airPlane03);

}

测试结果:

四、通过自定义的factoryBean来创建bean对象

================================

通过自定义的factoryBean来创建bean对象时,我们需要在工厂类上实现factoryBean接口,

Spring中有两种类型的bean,一种是普通bean,另一种是工厂bean,即FactoryBean。

工厂bean跟普通bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂bean的getObject方法所返回的对象。

工厂bean必须实现org.springframework.beans.factory.FactoryBean接口,使用factoryBean接口的一个好处就是只要是实现这个接口的类,spring都会认为是工厂。

该接口规定了三个方法:

我们先来创建一个自定义的、容器能够认识的factoryBean类,并且重写其中的三个方法。

package com.spring.factory;

import org.springframework.beans.factory.FactoryBean;

import com.spring.beans.AirPlane;

最后

分布式技术专题+面试解析+相关的手写和学习的笔记pdf

还有更多Java笔记分享如下:

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ean类,并且重写其中的三个方法。

package com.spring.factory;

import org.springframework.beans.factory.FactoryBean;

import com.spring.beans.AirPlane;

最后

分布式技术专题+面试解析+相关的手写和学习的笔记pdf

还有更多Java笔记分享如下:

[外链图片转存中…(img-WYYjU81N-1715545026935)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值