文章目录
Spring
-
什么是Spring?
Spring是一个轻量级的Java开发框架,目的是为了解决企业级应用开发中业务逻辑层和其他层的耦合问题,为java应用提供全面的基础架构支持,Spring负责基础架构,Java程序开发者则专注于应用程序的开发。
spring的使命是简化Java开发,Spring为企业级开发提供了丰富的功能,这些功能依赖于两个核心特性:依赖注入和面向切面编程
-
Spring框架的设计目标,设计理念,和核心是什么
设计目标:为开发者提供一站式轻量级开发平台
设计理念:Spring通过Ioc容器实现对象耦合关系的管理,并实现了依赖反转,将对象之间的关系交给Ioc容器,实现解耦
设计核心:通过Ioc容器管理pojo对象以及他们之间的耦合关系,通过AOP以动态非侵入的方式增强服务;Ioc让相互协作的组件保持松散的耦合,AOP编程允许把遍布应用各层的功能分离出来形成可重用的功能组件
- Spring框架能带来哪些好处?
- 依赖注入方法使得构造器和javaBean的依赖关系非常清晰
- Ioc容器更加趋向于轻量级,在有限的资源下使得应用程序的开发和发布变得十分有利
- Spring没有闭门造车,它利用了已有的技术如:ORM框架,视图技术等
- Spring框架是按照模块的形式组织的,由包和类的编号就可以看出其所属的模块
- 要测试一项用Spring开发的应用程序非常简单,测试相关的环境代码都包含在框架中
-
什么是控制反转(IoC)?什么是依赖注入?
控制反转的核心是:将对象的创建权交出去,将对象和对象之间关系的管理权交出去,由第三方容器来负责创建与维护。
控制反转常见的实现方式:依赖注入(Dependency Injection,简称DI)
依赖注入:
- 依赖指的是对象和对象之间的关联关系。
- 注入指的是一种数据传递行为,通过注入行为来让对象和对象产生关系。
依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式
-
依赖注入有什么优势?
让容器全权负责依赖查询,受管组件只需要暴露JavaBean的setter方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系
-
依赖注入实现方式
- 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
- Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
- 接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃
-
解释一下Spring中的IoC
Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了 Spring 框架 IoC 容器的基础,BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能,ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory的基础上添加了其他功能。
IOC:把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转
-
BeanFactory和 ApplicationContext有什么区别?
-
BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化,BeanFactory 还能在实例化对象的时生成协作类之间的关系,BeanFactory 还包含 了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。
-
application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置,根据请求分发 bean 的功能。但 applicationcontext 在此基础上还提供了其他的功能。
-
提供了支持国际化的文本消息
-
统一的资源文件读取方式
-
已在监听器中注册的 bean 的事件
-
-
是三种较常见的 ApplicationContext 实现方式
- ClassPathXmlApplicationContext:从 classpath 的 XML 配置文件中读取上下文,并生成上下文定义
ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);
- FileSystemXmlApplicationContext :由文件系统中的 XML 配置文件读取上下文
ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);
- XmlWebApplicationContext:由 Web 应用的 XML 文件读取上下文。
-
Spring有几种配置方式?
- 基于XML配置
- 基于注解配置
- 基于java配置
-
如何基于XML的方式配置Spring?
在 Spring 框架中,依赖和服务需要在专门的配置文件来实现,我常用的 XML 格式的配置文件。这些配置文件的格式通常用开头,然后一系列的 bean 定义和专门的应用配置选项组成。SpringXML 配置的主要目的时候是使所有的 Spring 组件都可以用 xml 文件的形式来进行配置。这意味着不会出现其他的 Spring 配置类型(比如声明的方式或基于 Java Class 的配置方式)Spring 的 XML 配置方式是使用被 Spring 命名空间的所支持的一系列的 XML 标签来实现的。Spring 有以下主要的命名空间:context、beans、jdbc、tx、aop、mvc 和 aso。
-
如何基于java的方式配置Spring?
Spring 对 Java 配置的支持是由@Configuration 注解和@Bean 注解来实现的。由@Bean 注解的方法将会实例化、配置和初始化一个 新对象,这个对象将由 Spring 的 IoC 容器来管理。@Bean 声明所起到的作用与 元素类似。被 @Configuration 所注解的类则表示这个类的主要目的是作为 bean 定义的资源。被@Configuration 声明的类可以通过在同一个类的 内部调用@bean 方法来设置嵌入 bean 的依赖关系。
-
基于注解的方式配置Spring
Spring 在 2.5 版本以后开始支持用注解的方式来配置依赖注入。可以用注解的方式来替代 XML 方式的 bean 描述,可以将 bean 描述转移到组件类的 内部,只需要在相关类上、方法上或者字段声明上使用注解即可。注解注入将会被容器在 XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。
-
什么是SpringBeans?
Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。
-
一个SpringBean定义包含什么?
一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖
-
怎样定义类的作用域
当定义一个 在Spring里,我们还能给这个bean声明一个作用域。它可以通过bean 定义中的scope属性来定义。如,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope 属性 必须设为singleton
-
Spring支持的几种bean的作用域
-
singleton : bean在每个Spring ioc 容器中只有一个实例。
-
prototype:一个bean的定义可以有多个实例。
-
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring
ApplicationContext情形下有效。
- session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域
仅在基于web的Spring ApplicationContext情形下有效。
- global-session:在一个全局的HTTP Session中,一个bean定义对应一个
实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
-
-
Spring中的单例bean是线程安全的吗?
不是,spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
把“singleton”变更为“pr