1. 什么是Spring
Spring 是一套开源的企业级开发框架,主要用于开发java和构建java ee平台的web应用。
2. Spring框架模块有哪些?
- core module
- bean module
- context module
- expression language module
- jdbc module
- orm module
- oxm module
- java messaging service module
- transaction module
- web module
- web-servlet module
- web struts module
- web portlet module
3. 核心模块是什么?
Spring 核心模块是Ioc container和beans,context和beans两个包是组成spring Ioc container的基础。
org.springframework.beans
org.springframework.context
~.context.ApplicationContext 接口表示Spring的容器,负责启动,配置,和装载beans。容器通过读取配置元文件,创建装配完整的应用。
4. 配置元文件metadata是什么?
metadata有三种表现形式,XML,java注解和java 代码。
它叙述组成应用的类(POJO)的定义,还有类与类之间的依赖关系。
java注解和java代码两种配置方式需要少量的XML申明支持即可
使用ApplicationContext在操作POJOs时,需要创造类的实例
ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext
或者WebXmlApplicationContext
5. 如何创建容器实例?
ApplicationContext context = new ClassPathXmlApplicationContext("service.xml","daos.xml");
代码如上,我们创建实例时,构造器的参数就是xml的配置文件的名称字符串。
6. 如何使用容器取得Bean?
使用方法T getBean(String name,Class<T> requiredType)
,可以取得beans实例
例如:
UserService service = context.getBean("userService",UserService.class);
7. 如何用@Bean注解代替XML配置metadata?
@Bean是方法层的Java代码注解,模拟XML配置和中的<bean/>
元素,
@Bean可以用在一个注解了@Configuration 或 @Component 的类中
比如:
@Configuration
public class AppConfig {
@Bean
public TransferServiceImpl transferService() {
return new TransferServiceImpl();
}
}
上面的注解表示创建一个名为transferService
的bean,指定为在TransferServiceImpl
这个类的实例
8. 请描述下Bean的作用域?
之前提到,metadata是控制beans定义和互相之间依赖关系的清单。
bean的定义可以控制其创造object的作用域。
Spring支持6种作用域,其中4种仅支持web-aware的容器:
1)singleton:默认作用域,一个singleton类的唯一实例被作用于多个引用类,此对象存储在单例beans池的缓存里,每次应用内请求引用此对象时,返回缓存中的同一对象。
单例bean一对多服务,一般不记录状态
Spring中的单例类和GoF设计模式中的单例类概念不同,GoF规定一个加载器ClassLoader只能生成一个特定singleton类的实例,但是Spring的定义将classloader换成了ApplicationContext
2)- @Scope(“prototype”)
每次引用非singleton类都需要new一个该类的bean,即每次getBean时容器都给一个新的bean实例。其生命周期由开发者自行负责。
非单例bean一对一服务,记录状态
3)request/session/application/websocket 域作用于网络应用容器实例(例如XmlWebApplicationContext)
- @RequestScope or @Scope(“request”)
用注解方式设定一个bean用于生成请求HTTP request的实例,当请求完成时,该bean销毁
如
@RequestScope
@Component
public class LoginAction {
// ...
}
其作用相当于
<bean id="loginAction" class="com.something.LoginAction" scope="request"/>
-
@SessionScope or @Scope(“session”)
类似Request,当HTTP Session结束时,该Scope的bean销毁 -
@ApplicationScope or @Scope(“application”)
类似Singleton域,但此Scope下bean全局作用于ServletContext,在ServletContext生命周期内创建和销毁。 -
@Scope(“websocket”)
此域的bean用于WebSocket协议下通信情景,客户机与服务器HTTP完成握手后,转换TCP连接做双向通信。