1 spring概述
Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发
这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI
)和面向切面编程(aspect-oriented programming,AOP
)。
2 Spring 框架中都用到了哪些设计模式
工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
- 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
- 主要解决:主要解决接口选择的问题。
- 何时使用:我们明确地计划不同条件下创建不同实例时。
单例模式:Bean默认为单例模式。
- 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 主要解决:一个全局使用的类频繁地创建与销毁。
代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
- 意图:为其他对象提供一种代理以控制对这个对象的访问。
- 主要解决:
- 在直接访问对象时带来的问题
- 直接访问会给使用者或者系统结构带来很多麻烦
- 何时使用:想在访问一个类时做一些控制。
- 如何解决:增加中间层。
- 键代码:实现与被代理类组合。
模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
- 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
- 主要解决:一些方法通用,却在每一个子类都重新写了这一方法。
- 何时使用:有一些通用的方法。
- 如何解决:将这些通用算法抽象出来。
观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。
- 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
- 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
- 何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
3 Spring控制反转(IOC)
基础说明
IOC:把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。其实就是对组件对象控制权的转移,从程序代码本身转移到了外部容器
。
Spring IOC 负责创建对象
,管理对象(通过依赖注入(DI)
,装配对象
,配置对象
,并且管理这些对象的整个生命周期
。
Spring IoC 的实现机制
Spring 中的 IoC 的实现原理就是工厂模式加反射机制
。
什么是Spring的依赖注入
springIoC主要实现方式有两种:依赖注入和依赖查找
依赖注入(Dependency Injection),即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
4 Spring Beans
什么是Spring beans?
Spring beans 是那些形成Spring应用的主干的java对象。
它们被Spring IOC容器初始化,装配,和管理。
这些beans通过容器中配置的元数据创建
。
Spring 容器提供配置元数据的方式
XML配置文件。
基于注解的配置。
基于java的配置。
Spring框架中的单例bean是线程安全的吗
不是
,Spring框架中的单例bean不是线程安全的。
spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
5 Spring面向切面编程(AOP)
AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
。
什么是AOP
AOP:一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)
,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性
。可用于权限认证、日志、事务处理等。
AOP 有哪些实现方式
AOP代理主要分为静态代理和动态代理。
- 静态代理的代表为
AspectJ
; - 动态代理则以
Spring AOP
为代表。