Spring IOC控制反转:
一种解耦的设计思想,它的主要目的是借助于(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦
a对象依赖b对象,主动创建b对象,将a对象的创建通过配置文件/注解交给IOC容器管理对象,将控制权反转。
DI(Dependecy Inject,依赖注入)
是实现控制反转的一种设计模式,依赖注入就是将实例变量传入到一个对象中去。
工厂设计模式
通过 BeanFactory 或 ApplicationContext 创建 bean 对象。 ApplicationContext:容器启动的时候,不管你用没用到,一次性创建所有 bean 。
简单工厂模式
对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象
工厂方法模式
和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂
抽象工厂模式
AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。
单例设计模式
Spring 中 bean 的默认作用域就是 singleton(单例)的。 除了 singleton 作用域,Spring 中 bean 还有下面几种作用域prototype : 每次请求都会创建一个新的 bean 实例。
Spring 实现单例的方式:
- xml : <bean id="userService" class="top.snailclimb.UserService" scope="singleton"/>
- 注解:@Scope(value = "singleton")
饿汉式----构造器私有,一开始new出静态不可变对象,可能造成空间浪费
懒汉式----在方法里调用时new出静态对象,多线程问题,需要sych加锁
DCL懒汉式--双重判断,指令重排问题,需要用voliate关键字修饰
反射-无视私有构造器,不安全问题,假设一对象调用方法创建,一对象反射构造方法创建,(在私有构造器内加锁)假设两对象都是用构造方法创建(加关键字的方法控制)
枚举类---默认单例
代理设计模式
AOP(面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,有利于未来的可拓展性和可维护性。
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理
观察者模式
改变监听者的循环判断,程序空转浪费资源,事件主动推送
被观察者(拥有观察者列表,通知所有观察者,具体 被观察者 继承被观察者抽象类)
观察者(实现同一个观察者接口,更新状态)
- 定义一个事件(被观察者): 实现一个继承自 ApplicationEvent,并且写相应的构造函数;(事件监听者的列表)
- 定义一个事件监听者(观察者),实现 ApplicationListener 接口,重写 onApplicationEvent() 方法;
- 使用事件发布者 发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。(ApplicationContext)
全部评论
(0) 回帖