Spring设计原理
Spring框架中的工厂体系结构中,ApplicationContext并不是顶层接口,顶层工厂接口是BeanFactory。


Spring框架中,从顶层工厂接口BeanFactory开始,提供了多个分支子接口。在每个分支子接口下,又有多个不同的实现类。我们可能会在想?为什么Spring框架针对工厂,为什么要设计如此多的接口和实现类?它的用意是什么?
Spring工厂体系设计原理:
Spring框架需要满足高扩展性,需要满足适应各种使用场景。
比如: xml配置方式支持、注解配置方式支持、国际化支持、C/S项目初始化ioc容器支持、web项目初始化ioc容器支持、不同方式加载资源文件支持等等。
所以划分了很多不同的接口(规范,各施其责),很多不同的抽像类(实现一部分方法)、很多不同的实现类。Spring:核心模块解析
Spring框架主要包含了五大核心模块:Core Container(核心容器)spring-core: Spring中的核心工具类包。spring-beans: Spring中定义bean的组件。spring-context: Spring的运行容器。spring-context-support: Spring容器的扩展支持。spring-expression: Spring的表达式语言支持(SpEL)。AOP(面向切面编程) spring-aop:基于代理的AOP支持。spring-aspects:集成Aspects的AOP支持。WEB(MVC) spring-web:提供web的基础功能。spring-webmvc:提供springmvc的功能。spring-websocket:提供web socket支持。spring-webmvc-portlet:提供Portlet环境的支持。Data Access/Integration(数据访问/集成) spring-jdbc:提供对jdbc连接的封装功能。spring-tx:提供对事务的支持。spring-orm:提供对象-关系映射支持。spring-oxm:提供对象-XML映射支持。spring-jms:提供消息队列的支持。Test(测试) spring-test:提供对测试功能的支持。 Spring IoC初始化源码分析
IoC(Inversion of Control)控制反转。在spring框架中,IoC是spring框架用于创建对象和管理对象的容器。它就是一个Map。
key : bean的id
value: BeanDefinition(包含了该<bean/>标签全部信息)简单概况
1、了解Spring中的设计模式IOC的底层/原理是什么?工厂设计模式IOC中的Bean都是单例的吗?默认是单例, 可以设置为多例模式: 单例模式JdbcTeamplate用了什么设计模式模板设计模式AOP的底层/原理是什么?代理模式2、Spring中学习了哪些设计模式?工厂设计模式单例设计模式模板设计模式代理设计模式3、 什么是代理模式? 提供代理类限制外部对目标对象的访问 4、静态代理和动态代理的区别? 静态代理的代理类是手动创建的, 动态代理的代理类是在代码运行时动态创建5、两种动态代理的区别? jdk: 一个实现接口: 目标对象需要实现接口 cglib: 一个继承: 目标对象不需要实现接口 6、动态代理JDK和CGLIB的区别? jdk: 目标对象需要实现接口 cglib: 目标对象不需要实现接口 7、Spring AOP的底层是什么? 动态代理技术: 代理模式 8、切入点、通知、切面是什么? 切入点: 目标对象中需要增强的方法 通知: 前置 后者 异常 环绕 , 目标方法需要增强的内容和访问 切面: 切面是由通知和切入点组成的关系 9、通知类型有哪些? 前置通知 后置通知 异常通知 最终通知 环绕通知 10、AOP相关的注解有哪些? @Before: 修饰方法, 将方法修饰为前置通知方法 @AfterReturning: 修饰方法, 将方法修饰为后置通知方法 @After: 修饰方法, 将方法修饰为最终通知方法 @Ponintcut: 修饰方法, 定义一个切入点表达式 @Around: 修饰方法, 将方法修饰为环绕通知方法
面试题1: Spring框架中有哪些模块?
1. Core Container(核心容器)
2. AOP(面向切面编程)
3. Web(MVC)
4. Data Access/Integration(数据访问/集成): JDBC、ORM、JPA
5. Test(测试) 面试题2: Spring框架中应用了哪些常见的设计模式(重点)
1. 单例模式:
保证一个类仅有一个实例,Spring管理的bean默认就是单例的。
2. 策略模式:
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,Spring中的资源加载。
3. 工厂方法模式:
Spring中的FactoryBean就是典型的工厂方法模式。
4. 代理模式:
Spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。
5. 观察者模式:
Spring中Observer模式常用的地方是listener的实现, 如ApplicationListener。
6. 模板方法模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Spring框架用到了很多抽像类。面试题3: Spring框架中的IoC是什么?(重点)
1. Spring IoC(Inversion of Control)指的是控制反转,IoC容器负责bean的实例化、管理bean与bean之间的依赖关系,它帮我们完成bean之间的依赖注入,控制权交由Spring容器,从而实现bean与bean之间松耦合。
2. 以前控制权是当前bean对象,现在控制权交由Spring容器,这种行为就是控制反转(IoC)。面试题4: Spring框架中的单例bean线程安全吗?
不,Spring框架中的单例bean不是线程安全的。
Spring作用域(scope)配置的区别:
- 非线程安全:singleton(默认): Spring容器只存在一个共享的bean实例。
- 线程安全: prototype: 每次对bean的请求都会创建一个新的bean实例。面试题5: Spring框架中的AOP是什么?(重点)
1. AOP(Aspect-Oriented Programming)面向切面编程,对bean做增强处理的。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2. 主要的意图是: 将日志记录、事务处理、异常处理、性能统计、安全控制等代码从原有业务逻辑代码中分离出来,将它们抽取到非业务逻辑的方法中,利用AOP切面可以将这些方法切入,从而达到原有的业务逻辑代码效果。