1. 什么是Spring框架?Spring框架有哪些主要模块?
Spring框架是一个为Java应用程序的开发提供了一个综合、广泛的基础性支持的Java平台。
Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。
Spring框架采用的是分层架构,一系列功能被分为20个模块。这些模块主要是:Core Container(核心容器)、Data Access/Integration(数据访问/集成)、Web、AOP(面向切面编程)、Instrumentation(工具)、Messaging(消息传递)和Test(测试)。
2. 使用Spring框架能带来哪些好处?
1. 非侵入式设计
2. 方便解耦,简化开发
3. 支持AOP
4. 支持声明式事务处理
5. 方便程序的测试
6. 方便集成各种优秀框架
7. 降低Java EE API的使用难度
3. 什么是控制反转(IoC)?什么是依赖注入(DI)?
控制反转:在编程中,当我们用到一个对象时,首先需要主动创建它,但是在大型项目中,大家分工合作,也许我们要用到的对象对应的类还没有被编写出来,我们肯定没办法new出来,这个时候就有了Spring框架,对象交给Spring来创建(我们不关心也没有能力关心是否已经有了对应的类和Spring是否能够创建我们需要的对象),我们直接从Spring容器中获取对象使用即可,此前对象是由我们主动创建的,我们具有控制权,但使用Spring框架之后我们将创建对象的权力交给Spring,也就意味着我们对对象的控制权反转给了Spring,这就是控制反转。
控制未反转:由我们(开发者)来控制对象的创建。
控制反转:我们将创建对象的控制权交给了Spring,由Spring来控制对象的创建。
依赖注入:当我们需要用到一个对象的时候,从Spring容器中获取,这对于Spring来讲,就是将程序所依赖的对象注入到程序中,这就是所谓的依赖注入。
在Java中依赖注入有三种实现方式:
1. 构造器注入
2. Setter方法注入
3. 接口注入
4. 请解释下Spring框架中的IoC?
Spring中的org.springframework.beans包和org.springframework.context包构成了Spring框架IoC容器的基础。
BeanFactory接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。
ApplicationContext接口对BeanFactory(是一个子接口) 进行了拓展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。
org.springframework.beans.factory.BeanFactory是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC容器的核心接口。
5. BeanFactory和ApplicationContext有什么区别?
BeanFactory:是Spring中比较原始,比较古老的Factory。以为比较古老,所以BeanFactory无法支持spring插件。例如:AOP、web应用等功能。
ApplicationContext:是BeanFactory的子类,基本上代替了BeanFactory的工作。以一种更面向框架的工作方式以及上下文进行分层和实现继承,并在这个基础上对功能进行扩展:
1. MessageSource:提供国际化的消息访问。
2. 资源访问:URL和文件等。
3. 事件传递。
4. Bean的自动装配。
5. 各种不同的应用层的Context实现。
区别:
1. 如果使用ApplicationContext,如果配置的Bean是Singleton(单例),那么不管你有没有或想不想用它,它都会被实例化。好处是可以预先加载,坏处是浪费内存。
2. BeanFactory,当使用BeanFactory实例化对象时,配置的Bean不会被马上实例化(懒着加载),而是等到你使用bean的时候才会被实例化。好处是节约内存,坏处是速度比较慢。多用于移动设备的开发。
3. 没有特殊要求的情况下,应该使用ApplicationContext完成。以为BeanFactory能完成的事情,ApplicationContext都能完成,并且提供了更加丰富的功能。
6. Spring有几种配置方式?
将Spring配置到应用开发中有三种方式:
1. 基于XML的配置
2. 基于注解的配置
3. 基于Java的配置