IoC和DI

是什么,什么用,优点
IoC是一种设计思想,它借助“第三方” 即IoC容器,实现具有依赖关系的对象之间的解耦,将对象的控制权转移到外部
从依赖倒置原则 到控制反转 再到依赖注入image.png
依赖注入可以用setter注入方式或者构造器注入,依赖注入就是将实例变量传入到一个对象中

工厂模式

通过 BeanFactory(延迟注入,用到某个bean的时候才会注入) 或 ApplicationContext (饿汉,一次性创建所有bean对象)创建 bean 对象

单例模式

线程池、缓存、对话框、注册表、日志对象、充当打印机和显卡等设备的驱动程序的对象
这类对象只能有一个实例
bean默认作用域就是单例的

代理设计模式

在AOP中的应用:能够将 与业务无关但是被业务模块所共同调用的逻辑(事务处理、日志管理、权限控制)封装起来,减少重复代码,降低模块间耦合度,可维护性可拓展性up
举例:@Transaction (Spring AOP —— 基于动态代理)
Spring AOP 和AspectJ AOP的区别:
Spring 是运行时增强,AspectJ编译时增强,切面太多的话,最好选择 AspectJ

模板方法

jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类使用了模板方法(有abstract方法)
Spring不是使用 继承的方式来实现模板模式,而是使用CallBack模式与模板方法模式配合(?)

观察者模式

对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。
Spring事件驱动模型就是一种典型应用。
该模型有三种角色:
事件角色、事件监听者、事件发布者

适配器模式(Adapter pattern)

将一个接口转换成用户希望的另一个接口,从而使得 原本因为接口不匹配而无法一起工作的两个类 能够一起工作
Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

AOP中

SpringMVC中

开闭原则,对扩展开放,对修改关闭

装饰者模式

动态地为对象添加一些额外的属性或功能,并且不去修改原有的代码
例如: Spring 中配置DataSource时 动态切换不同的数据源