1.什么是 Spring
Spring是一个开源应用框架,旨在降低应用程序开发的复杂度,他是轻量级,松耦合的。它具有分层体系结构,允许用户选择组件,由于它拥有依赖注入和控制反转,JDBC得以简化。
2.Spring 应用程序有哪些不同组件?
Spring 应用一般有以下组件:
· 接口 - 定义功能。
· Bean 类 - 它包含属性,setter 和 getter 方法,函数等。
· Spring 面向切面编程(AOP) - 提供面向切面编程的功能。
· Bean 配置文件 - 包含类的信息以及如何配置它们。
· 用户程序 - 它使用接口。
3.什么是 Spring IOC 容器?
1.spring框架的核心就是spring容器。
2.容器创建对象,将他们装配在一起,配置他们,并管理他们完整的生命周期3.Spring容器使用依赖注入来管理组成应用程序的组件。
4.容器通过配置元数据来接收对象进行实例化,该元数据可以通过XML,java注解或java代码提供。
4.什么是依赖注入?
在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码 中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。
通常,依赖注入可以通过三种方式完成,即: · 构造函数注入 · setter 注入 · 接口注入 在 Spring Framework 中,仅使用构造函数和 setter 注入。
5.spring中有多少IOC容器
BeanFactory-他就像一个Bean的集合工厂,他会在客户端需要时,实例化对象。
ApplicationContext-他扩展了BeanFactory这个接口,扩展了他的功能。
6.Spring IOC的实现机制
IOC的实现原理是工厂模式和反射机制。
7.Spring提供了哪些配置方式
1.基于XML,配置bean所需要的依赖项和服务。
2.基于注解配置,可以在相关类、方法和其字段上添加注解来声明配置。
3.基于Java API,主要通过@Bean和@Configuration;
8.Spring的作用域(bean scope)
1.singleton:每个IOC容器只有一个实例。
2.prototype:每次请求都会产生一个实例。
3.request:每次HTTP请求都会产生一个实例,这个实例只能应用在此次请求中。
4.session:每次HTTP请求都会产生一个实例,这个实例只能应用在这个Session中。
5.Global Session:类似于一个标准的HTTP Session作用域,但是他只基于protlet的web中才有意义。
9.spring bean 容器的生命周期
1.根据配置,对bean进行实例化。
2.通过依赖注入,填充bean的属性。
3.如果实现了BeanNameAware接口,则通过传递Bean的ID调用setBeanName方法。
4.如果实现了BeanFactoryAware接口,则通过传递自身实例对象,调用steBeanFactory()。
5.如果存在与bean关联的任何BeanPostProcessors,则调用preProcessorsBeforeInitialization()。
6.如果为bean的、指定了init方法则调用它。
7.最后如果存在与bean关联的任何BeanPostProcessors,则调用postProcessorsAfterInitialization()。
8.如果bean实现了DisposableBean接口,当spring容器关闭时,则会调用destory()。
9.如果为bean指定了destory方法,则调用它。
10.什么是spring的内部bean
当一个bean用作另一个bean的属性时,称其为内部bean。
11.自动装配有哪些方式
1.no - 表示没有设置自动装配,则会采用显式bean引用进行装配。
2.byName - 他根据bean的名称注入依赖项。
3.byType - 根据bean的类型注入依赖项。
4.构造函数 - 通过调用类的构造函数注入依赖项。
5.autodetect - 首先通过构造函数进行装配,如果不行,则采用bytype的方式进行装配。
12.常用注解
@Component:将java类标记为bean。spring组件扫描机制可将其拉入到应用程序中。
@Controller:将一个类标记为 Spring Web MVC,IOC会将其标记的类自动拉入到容器中。
@Service:用于标记服务层的类,以更好的方式指明了意图。
@Repository:是@Component的特化,他为DAO提供了好处,可以将DAO拉入容器中,可以将未经检验的DAO的异常转化为SpringDataAccessException。
@Required:应用于bean的setter方法。表示被他标记的属性必须被设置。
@Autowired :更准确的控制应该在何处用何种方式进行自动装配。
@Qualifier:如果有多个相同类型的bean,并希望只装配其中一个。
例如,一个service接口有两个实现类,则可以用@Qualifier指定装配其中一个。
@RequestMapping:将HTTP请求,映射到相应的控制器的类中。
13.spring DAO 有什么用
将JDBC,Hibernate等数据访问技术更容易以一种统一的方式工作。
14.spring 支持的事务管理类型
1.程序化事物管理:在编程的过程中进行事物管理,灵活性高,但是维护困难。
2.声明式事物管理:与代码分离,在配置中进行事物管理。
15.什么是AOP
面向切面编程,有两种实现方式。
静态代理:使用AOP框架提供的命令进行编译。
动态代理:在运行时,在内存中临时生成动态代理类
JDK动态代理,CGLIb
16.Spring AOP and AspectJ AOP 有什么区别
Spring AOP 基于动态代理方式实现;AspectJ 基于静态代理方式实现。