Spring Ioc源码深入剖析预备知识3

简介: Spring Ioc源码深入剖析预备知识3

4 ioC用到的那些设计模式

引言:

为什么要讲设计模式(不是源码课程吗?)

1、Spring中使用了大量的设计模式

2、如果不懂设计模式,你肯定读不懂(部分)Spring的源码,原因就是你打断点跟到某一行,值就初始化完了,究竟在哪里初始化完的?你找不到,为什么,因为你不懂设计模式,找不到那个地方设计模式怎么讲?

剖析spring源码过程中; 遇到一个设计模式,就讲一个设计模式

4.1 设计模式之工厂

工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。

工厂模式(Factory Pattern)分为三种

1、简单工厂

2、工厂方法

3、抽象工厂

4.1.1 简单工厂模式

ApplicationContext context =new ClassPathXmlApplicationContext("classpath*:application.xml");\
UserService userService = context.getBean(UserService.class);

简单工厂模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层简单的

封装

定义接口IPhone

public interface Phone {
void make();
}

实现类

public class IPhone implements Phone {
public IPhone() {
this.make();
}
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("生产苹果手机!");
   }
}

实现类

public class MiPhone implements Phone {
public MiPhone() {
this.make();
}
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("生产小米手机!");
   }
}

定义工厂类并且测试

public class PhoneFactory {
public Phone makePhone(String phoneType) {
if (phoneType.equalsIgnoreCase("MiPhone")) {
return new MiPhone();
} else if (phoneType.equalsIgnoreCase("iPhone")) {
return new IPhone();
   }
return null;
}
//测试简单工厂
public static void main(String[] arg) {
PhoneFactory factory = new PhoneFactory();
Phone miPhone = factory.makePhone("MiPhone");      
IPhone iPhone = (IPhone) factory.makePhone("iPhone");  
   }
}

4.2 设计模式之模板

模板模式(Template Pattern):基于抽象类的,核心是封装算法

Spring核心方法refresh就是典型的模板方法

org.springframework.context.support.AbstractApplicationContext#refresh

模板设计模式—模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现

//模板模式
public abstract class TemplatePattern {
protected abstract void step1();
protected abstract void step2();
protected abstract void step3();
protected abstract void step4();
//模板方法
public final void refresh() {
//此处也可加入当前类的一个方法实现,例如init()
step1();
step2();
step3();
step4();
  }
}

定义子类

//模板模式
public class SubTemplatePattern extends TemplatePattern {
@Override
public void step1() {
System.out.println(">>>>>>>>>>>>>>1");
}
@Override
public void step2() {
System.out.println(">>>>>>>>>>>>>>2");
}
@Override
public void step3() {
System.out.println(">>>>>>>>>>>>>>3");
}
@Override
public void step4() {
System.out.println(">>>>>>>>>>>>>>4");
}
  //测试
public static void main(String[] args) {
TemplatePattern tp = new SubTemplatePattern();
tp.refresh();
   }
}

输出

4.3 设计模式之观察者

什么是观察者模式

观察者模式(Observer Pattern):当对象间存在一对多关系时,则使用观察者模式(ObserverPattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。

Spring 的事件机制就是具体的观察者模式的实现

spring中的多播与事件

AbstractApplicationContext#initApplicationEventMulticaster
 AbstractApplicationContext#registerListeners

观察者模式有哪些角色?

事件 ApplicationEvent 是所有事件对象的父类,继承JDK的EventObject

事件监听 ApplicationListener ,也就是观察者对象,继承自 JDK 的 EventListener ,可以监听到事件;该类中只有一个方法

onApplicationEvent 。当监听的事件发生后该方法会被执行。

事件发布 ApplicationContext , 实现事件的发布。(发布事件)

========================or=================================

Spring中的多播

事件发布 ApplicationEventMulticaster ,用于事件监听器的注册和事件的广播。

5 AOP用到的那些设计模式

5.1 设计模式之代理

Java常用设计模式

目录
相关文章
|
15天前
|
Java 应用服务中间件 Nacos
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
30 0
|
18天前
|
监控 数据可视化 安全
一套成熟的Spring Cloud智慧工地平台源码,自主版权,开箱即用
这是一套基于Spring Cloud的智慧工地管理平台源码,具备自主版权,易于使用。平台运用现代技术如物联网、大数据等改进工地管理,服务包括建设各方,提供人员、车辆、视频监控等七大维度的管理。特色在于可视化管理、智能报警、移动办公和分布计算存储。功能涵盖劳务实名制管理、智能考勤、视频监控AI识别、危大工程监控、环境监测、材料管理和进度管理等,实现工地安全、高效的智慧化管理。
|
8天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
18 0
|
1天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
38 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
8天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
20 0
|
8天前
|
XML Java 程序员
什么是Spring的IoC容器?
【4月更文挑战第30天】什么是Spring的IoC容器?
15 0
|
9天前
|
设计模式 安全 Java
【初学者慎入】Spring源码中的16种设计模式实现
以上是威哥给大家整理了16种常见的设计模式在 Spring 源码中的运用,学习 Spring 源码成为了 Java 程序员的标配,你还知道Spring 中哪些源码中运用了设计模式,欢迎留言与威哥交流。
|
11天前
|
Java Spring 容器
【Spring系列笔记】IOC与DI
IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
29 2
|
11天前
|
Java 测试技术 数据库连接
Spring中ioc的优点
总之,Spring中的IoC提供了一种更加灵活、可维护、可测试和可扩展的方式来管理组件之间的依赖关系,从而提高了应用程序的质量和可维护性。这使得开发人员能够更专注于业务逻辑而不是底层的技术细节。
32 1
|
13天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)