终于到最后一个比较常问的点了。基本上问你对于Spring的理解。把它的核心概念:IOC和AOP答好,以及Spring的工作原理,Spring里用到的一些设计模式答好就差不多了……
===================================20170727更新================================
下面摘抄了对于Spring理解比较形象的好文章~
1.Java 本身的设计要比 Spring 复杂太多太多,但是都是构建一个数据结构,然后根据这个数据结构设计他的生存环境,
并让它在这个环境中按照一定的规律在不停的运动,在它们的不停运动中设计一系列与环境或者与其他个体完成信息交换。这样想来回过头想想我们用到的其他框架都是大慨类似的设计理念。
2.Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。
3.Spring 就是面向 Bean 的编程(BOP,Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。
Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就像没有面向对象编程,Spring 中没有 Bean 也就没有 Spring 存在的意义
4.把Bean 比作一场演出中的演员的话,那 Context 就是这场演出的舞台背景,而 Core应该就是演出的道具了。只有他们在一起才能具备能演出一场好戏的最基本的条件。
当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目就是 Spring 能提供的特色功能了。
5.我们知道 Bean 包装的是 Object,而 Object 必然有数据,如何给这些数据提供生存环境就是 Context 要解决的问题,对 Context 来说他就是要发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。所以 Context 就是一个 Bean 关系的集合,这个关系集合又叫 Ioc 容器,
一旦建立起这个 Ioc 容器后 Spring 就可以为你工作了。那 Core 组件又有什么用武之地呢?其实 Core 就是发现、建立和维护每个 Bean 之间的关系所需要的一些列的工具,从这个角度看来,Core 这个组件叫 Util 更能让你理解。
===================================20170727更新================================
1、Spring的工作原理和机制
Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
Spring内部最核心的就是IOC了--动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
2、AOP与IOC
1)IOC
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 控制反转
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
依赖注入三种方式:
setter-- 设值注入
interface-- 接口注入
constructor-- 构造注入
2)AOP
AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
3、Spring的核心模块
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
4、Spring用到的设计模式
1)简单工厂
又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 如构造注入或设置注入不同的bean或一般参数,bean实例也不同
spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
2)工厂方法(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
spring中的FactoryBean就是典型的工厂方法模式。
3)单例(Singleton)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。 bean默认是Singleton的
spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。
4)适配器(Adapter)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
spring中在对于aop的处理中有Adapter模式的例子。
由于Advisor链需要的是MethodInterceptor对象,所以每一个Advisor中的Advice都要适配成对应的MethodInterceptor对象。
5)包装器(Decorator)
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。
eg:想到在spring的applicationContext中配置所有的dataSource。这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然后sessionFactory根据客户的每次请求,将dataSource属性设置成不同的数据源,以到达切换数据源的目的。
6)代理(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。
spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。
7)观察者(Observer)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
spring中Observer模式常用的地方是listener的实现。如ApplicationListener。
8)策略(Strategy)
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
spring中在实例化对象的时候用到Strategy模式
在SimpleInstantiationStrategy中有如下代码说明了策略模式的使用情况
9)模板方法(Template Method)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Template Method模式一般是需要继承的。这里想要探讨另一种对Template Method的理解。spring中的JdbcTemplate,在用这个类时并不想去继承这个类,因为这个类的方法太多,
但是我们还是想用到 JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方 法中。
但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵 JdbcTemplate中变量的方法,我们去实现这个方法,
就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate,从而 完成了调用。这可能是Template Method不需要继承的另一种实现方式吧。
相关推荐
本系列主要关注这些框架在面试中的常见问题,旨在帮助求职者提升自己的技术深度和广度。 首先,Spring框架是Java企业级应用的事实标准,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,简化了Java应用的...
1. **Spring框架** - **依赖注入(Dependency Injection,DI)**:Spring的核心特性,通过容器管理对象的生命周期和对象之间的关系,降低组件间的耦合。 - **AOP(面向切面编程)**:提供声明式事务管理、日志记录...
首先,Spring框架是IoC(Inversion of Control)和AOP(Aspect Oriented Programming)的实现,它提供了全面的企业级应用开发解决方案。IoC使得开发者可以将对象的创建和管理交给Spring容器,从而降低组件间的耦合度...
**Spring框架** Spring是一个全面的Java应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,简化了Java应用程序的开发和维护。在面试中,你需要了解: 1. **依赖注入**:理解如何通过XML配置或...
Spring框架是Java开发中的一个全能型容器,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等核心特性,大大简化了企业级应用的复杂性。面试中,可能会涉及到以下...
开源框架面试题系列:Spring+SpringMVC+MyBatis 微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud 性能优化面试必备 面试常问必备之MySQL面试55题 面试常问必备之Redis面试专题 面试必备之乐观锁与悲观锁 ...
Spring框架是另一个核心组件,它提供依赖注入(DI)和面向切面编程(AOP)等功能,支持多种集成框架。面试中可能涉及: 1. Spring的核心模块和IoC容器:Bean的生命周期管理,配置方式(XML、注解、Java配置)。 2. ...
其次,Spring Boot是Spring框架的简化版,旨在简化Spring应用程序的初始搭建和开发过程。它通过默认配置极大地减少了代码量,同时提供了快速启动和运行的应用程序能力。在微服务架构中,Spring Boot常作为服务的起点...
BAT面试常问80题 Dubbo服务框架面试专题及答案...开源框架面试题系列:Spring+SpringMVC+MyBatis 面试必问并发编程高级面试专题 面试常问必备之MySQL面试55题 微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud
这个面试专题系列涵盖了三个关键的技术框架:Dubbo、Spring Boot和Spring Cloud,这些都是构建微服务架构的核心组件。以下是对这些技术的详细解读: 1. **Dubbo**:由阿里巴巴开源的高性能Java RPC框架,它为服务...
标题《Spring面试常见问题》中的知识点涵盖了关于Spring框架的多个方面的内容。Spring是一个开源的Java企业级应用开发框架,它包含了一系列核心的特性,可以用于开发任何Java应用程序。Spring框架的设计目标是简化...
标题中的"Java面试系列-Spring.pdf"表明这是关于Java编程语言中的Spring框架的面试准备资料。这个框架是Java和Java EE应用开发中的一个重要工具,特别强调了其在安全方面的应用。接下来,我们将深入探讨Spring框架的...
接下来是Spring Boot,它是Spring框架的一个简化版,旨在简化新Spring应用的初始搭建以及开发过程。Spring Boot的特点在于其自动配置和起步依赖,使得开发者可以快速构建独立运行的应用。面试时,你需要能够解释...
Spring Boot 论坛式面试题系列 本资源为 Spring Boot 面试题系列,涵盖了 Spring Boot 的基础知识、优点、核心功能、配置、自动配置、监控、项目创建等方面。 标题:"架构师面试题系列之 Spring Boot 面试专题及...
首先,Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,主要用于实现分布式服务的调用。它提供了服务注册、服务发现、负载均衡、容错机制等核心功能。在面试中,你可能需要了解以下几点: 1. **服务提供与...
针对学习者和专业人士在准备认证考试或面试过程中可能遇到的问题,本教程还提供了一系列常见问题及解答。这些问题覆盖了Spring框架的基础概念、核心组件、应用场景等方面,帮助读者巩固所学知识并提升实战能力。 ##...
Spring 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而不是只接受特定类型的组件。 IOC—...
Spring框架是Java开发中的核心组件,它...以上是Spring框架的关键知识点,面试时,面试官可能会结合具体场景询问如何使用这些特性,或者要求解决实际问题。熟悉并理解这些概念对于成为一名合格的Spring开发者至关重要。