Spring中的设计模式2
Spring设计模式分析 工厂模式和单态模式 工厂模式:可以将java对象对象的调用者从被调用者的实现逻辑中分离。调用者只关心被调用者必须满足的某种规则,这种规则我们看做是接口,不必关心实例的具体实现过程,具体实现由bean工厂。 工厂模式:根据调用数据,返回一个类的实例,此类可以使多个类的某个类。通常这些类实现接口或继承类。提供各对象之间的角色划分,降低程序的耦合。
单态模式:单例模式,默认所有的bean设置为单例模式,即对所有具有相同id的bean的请求,都返回一个共享bean实例,可以降低java创建和销毁时的系统开销,Spring自动。无需自己完成 单例模式:限制类实例的创建,采用这种模式设计的类,可以保证仅有一个实例,并提供该实例的全局访问点。共享同一个内存区。构造器私有,通过静态方法返回实例,保证实例是同一个。将实例设置成静态类属性。 Spring对单例与工厂模式的实现 工厂模式的实现:即使没有工厂类,也可以实现工厂模式
- <!-- 使用Spring的工厂模式 -->
- <bean id="color" class="com.pb.test.Color"></bean>
- <bean id="grey" class="com.pb.test.Grey"></bean>
<!-- 使用Spring的工厂模式 -->
<bean id="color" class="com.pb.test.Color"></bean>
<bean id="grey" class="com.pb.test.Grey"></bean>
- Ink color = (Ink)context.getBean("color");
- Ink grey = (Ink)context.getBean("grey");
- System.out.println(color.getColor());
- System.out.println(grey.getColor());
Ink color = (Ink)context.getBean("color");
Ink grey = (Ink)context.getBean("grey");
System.out.println(color.getColor());
System.out.println(grey.getColor());
对单例模式的实现 两个对象引用地址相同。 1.主体代码外无须出现Spring特定接口 2.调用代码面向Ink接口,无须了解实现类的名称 3.工厂无须多个实例,因此工厂使用单例,Spring上下文,实现了单例。Spring工厂模式,不进提供了创建bean的功能,还提供对bean的生命周期的管理,以及依赖关系,属性
- Ink color1 = (Ink)context.getBean("color");
- Ink color2 = (Ink)context.getBean("color");
- System.out.println(color1==color2);
Ink color1 = (Ink)context.getBean("color");
Ink color2 = (Ink)context.getBean("color");
System.out.println(color1==color2);
Spring的核心机制 依赖注入和控制反转
当某个角色需要另一个角色的协助,在传统的程序设计过程中,通常由调用者来创建被调用者的过程,但在Spring中,创建被调用者的工作不再由调用者来完成,因此被称为控制反转, 创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也成为依赖注入
依赖:两个元素中一个定义发生改变则引起另一个元素发生变化, 则两个元素之间存在依赖关系
系统复杂是因为系统的各部分的关联程度太高,各模块之间的依赖程度太高。
Spring里,创建被调用者实例的工作由Spring容器来做,然后Spring 容器把被调用者实例注入到调用者中,
依赖注入让bean与bean之间以配置文件的形式组织到一起,而不是以代码的形式耦合到一起
可以随意更换接口的实现
Spring的核心概念 面向方面编程 AOP
不会取代面向对象编程,也就是OOP,面向方面编程是面向对象编程的补充。AOP从动态的角度考虑程序结构,从而使OOP更加完善,面向对象编程将程序分解成各个层次的对象,而面向方面的编程将程序运行过程分解成各个各个切面
AOP模块是Spring 的一个关键组件。是Spring IOC依赖注入的完善和补充,使之成为更加有效的中间件。
但是IOC不依赖于AOP,可认为AOP不是必须的
AOP的目标是提供与Spring IOC容器紧密结合的AOP框架,不致力于 提供与完善的AOP实现,而是以实现为主,提供AOP与IOC的完美集合,AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面
最新文章
- Windows Server 2012 支持的逻辑盘容量最大是多少?
- angular源码分析:angular的源代码目录结构说明
- 固定虚拟机的IP
- git参考书籍
- Python学习笔记六--文件和输入输出
- JAVA中,JSON MAP LIST的相互转换
- IOS obj-c、c、c++混编
- Linux下常用操作汇总
- 深度解析:Android在Mms设置页面更改短信中心号码流程
- Matrix (二维树状数组)
- 任何一款IDE的设计思路
- 纯JSP实现用户登录注册,记事本
- 深入浅出多线程——ReentrantLock (二)
- Android Studio自定义注释模板
- inux中ifreq 结构体分析和使用(转)
- tab页的使用方法
- org.apache.catalina.LifecycleException项目启动报错
- 29、sass
- Nginx打卡
- 关于Ctime库
热门文章
- 【Luogu】 P3928 SAC E#1 - 一道简单题 Sequence2
- 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage
- Creating a new dynamic form project, business modeling.
- HDU 2577 How to Type (字符串处理)
- Python脚本 - 查询磁盘的读写次数信息
- FastDFS介绍和配置过程
- 函数导出在kvm_intel.ko,kvm.ko不共享
- python基础===PEP网站,代码规范指南
- MS SQLServer 批量附加数据库
- mac系统中实现vitualBox中访问内网端口