目录
五:BeanFactory 和 applicationcontext有什么区别
一:什么是spring框架,有哪些模块
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成 Spring 框 架,不必担心 Spring 是如何在后台进行工作的。Spring 框架至今已集成了 20 多个模块。这些模块主要为核心容器、数据访问 / 集成 , Web、 AOP (面向切面编程)、工具、消息和测试模块
二: spring框架有哪些好处
1.Dependency Injection(DI) 方法使得构造器和 JavaBean properties 文件中的依赖关系一目了然。2. 与 EJB 容器相比较, IoC 容器更加趋向于轻量级。这样一来 IoC 容器在有限的内存和 CPU 资源的情况下进行应用程序的开发和发布就变得十分有利。3. Spring 并没有闭门造车, Spring 利用了已有的技术比如 ORM 框架、 logging 框架、 J2EE 、 Quartz 和 JDK Timer ,以及其他视图技术。4.Spring 框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。5.要测试一项用 Spring 开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用 JavaBean 形式的 POJO 类,可以很方便的利用依赖注入来写入测试数据。6.Spring 的 Web 框架亦是一个精心设计的 Web MVC 框架,为开发者们在 web 框架的选择上提供了一个除了主流框架比如 Struts 、过度设计的、不流行 web 框架的以外的有力选项。7.Spring 提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单 DB 的环境下)和复杂的共同事物处理(比如利用 JTA 的复杂 DB 环境)。
三:什么是控制反转,什么是依赖注入
控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业 务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配 器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“ 依赖注入 ” 实现的。
控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。
依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?
在Java中有三种方式实现依赖注入:
1.构造器注入
2.setter方法注入
3.接口注入
四:spring框架中IOC是什么
Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了 Spring 框架 IoC 容器的基础。
BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex 接口对 BeanFactory (是一个子接口)进行了扩展,在 BeanFactory的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的WebApplicationContext 。
org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具体实现,用来包装和管理前面提到的各种 bean 。 BeanFactory 接口是 Spring IoC 容器的核心接口。
IOC: 把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。
五:BeanFactory 和 applicationcontext有什么区别
BeanFactory 可以理解为含有 bean 集合的工厂类。 BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含 了 bean 生命周期的控制,调用客户端的初始化方法 (initialization methods )和销毁方法( destruction methods )。从表面上看, application context 如同 bean factory 一样具有 bean 定义、 bean 关联关系的设置, 根据请求分发 bean 的功能。但 applicationcontext 在此基础上还提供了其他的功能。1. 提供了支持国际化的文本消息2. 统一的资源文件读取方式3. 已在监听器中注册的 bean 的事件
六:spring有几种配置方式
将 Spring 配置到应用开发中有以下三种方式:1. 基于 XML 的配置2. 基于注解的配置3. 基于 Java 的配置
七:Spring Bean的生命周期
Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除。Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。 Bean 的生命周期由两组回调(call back)方法组成。1. 初始化之后调用的回调方法。2. 销毁之前调用的回调方法。Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:1.InitializingBean 和 DisposableBean 回调接口2. 针对特殊行为的其他 Aware 接口3. Bean 配置文件中的 Custom init() 方法和 destroy() 方法4.@PostConstruct 和 @PreDestroy 注解方式
八:Spring Bean的作用域有哪些区别
Spring 容器中的 bean 可以分为 5 个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:1. singleton :这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean 的实例,单例的模式由 bean factory 自身来维护。2. prototype :原形范围与单例范围相反,为每一个 bean 请求提供一个实例。3. request :在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后, bean会失效并被垃圾回收器回收。4. Session :与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后, bean会随之失效。5. global- session : global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工作时, 它包含很多 portlet 。如果 你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全局变量 需要存储在 global-session 中。 全局作用域与 Servlet 中的 session 作用域效果相同。
九:spring框架中的beans使线程安全的吗
Spring 框架并没有对单例 bean 进行任何多线程的封装处理。关于单例 bean 的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的 Spring bean 并没有可变的状态 ( 比如 Serview 类 和 DAO 类 ) ,所以在某种程度上说 Spring 的单例 bean 是线程安全的。如果你的 bean 有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态 bean 的作用域由 “singleton” 变更为 “prototype” 。
十:自动装配模式的区别
在 Spring 框架中共有 5 种自动装配,让我们逐一分析。1. no :这是 Spring 框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在 bean 定义中用标签明确的设置依赖关系。2. byName :该选项可以根据 bean 名称设置依赖关系。当向一个 bean 中自动装配一个属性时,容器将根据 bean 的名称自动在在配置文件中查询一个匹配的 bean 。如果找到的话,就装配这个属性, 如果没找到的话就报错。3. byType :该选项可以根据 bean 类型设置依赖关系。当向一个 bean 中自动装配一个属性时,容器将根据 bean 的类型自动在在配置文件中查询一个匹配的 bean 。如果找到的话,就装配这个属性, 如果没找到的话就报错。4. constructor :造器的自动装配和 byType 模式类似,但是仅仅适用于与有构造器相同参数的 bean ,如果在容器中没有找到与构造器参数类型一致的 bean ,那么将会抛出异常。5. autodetect :该模式自动探测使用构造器自动装配或者 byType 自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在 bean 内部没有找到相应的构造器或者是无参构造器,容器就会自动选择 byTpe 的自动装配方式。