spring源码分析第六天------spring经典面试问题
1、Spring5 新特性及应用举例
2、Spring 经典的面试问题
a、什么是 Spring 框架?Spring 框架有哪些主要模块?
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮 助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
b、使用 Spring 框架能带来哪些好处?
IOC和DI、事务性、springMVC、Spring AOP
c、在 Java 中依赖注入有以下三种实现方式:
接口注入–>@Autowired:自动装配
构造器注入:@Autowired //构造器注入
private TestBean11(String message) { this.message = message;
}setter注入:private String message;
@Autowired //setter方法注入
public void setMessage(String message) { this.message = message;
} 字段注入:
public class TestBean12 {
@Autowired //字段注入
private String message;
//省略getter和setter
}
Setter 方法注入 :
//注入对象springDao
private SpringDao springDao; //一定要写被注入对象的set方法 public void setSpringDao(SpringDao springDao) { this.springDao = springDao;
}
构造器注入
//注入对象springDao
private SpringDao springDao;
private User user; public SpringAction(SpringDao springDao,User user){ this.springDao = springDao; this.user = user; System.out.println("构造方法调用springDao和user");
}
3、BeanFactory 和 ApplicationContext 有什么区别?
BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接 收到客户端请求时将对应的 bean 实例化。
BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置 中解放出来。
BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization Methods)和销毁方法(destruction Methods)。
从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置, 根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的功能。
提供了支持国际化的文本消息;
统一的资源文件读取方式;
已在监听器中注册的 bean 的事件
4、Spring 提供几种配置方式来设置元数据?
将 Spring 配置到应用开发中有以下三种方式:
1.基于 XML 的配置
2.基于注解的配置
3.基于 Java 的配置
5、如何用基于 Java 配置的方式配置 Spring?
Spring 对 Java 配置的支持是由@Configuration 注解和@Bean 注解来实现的。
由@Bean 注解的方法将 会实例化、配置和初始化一个新对象,这个对象将由 Spring 的 IOC 容器来管理。
@Bean 声明所起到的 作用与 元素类似。
被@Configuration 所注解的类则表示这个类的主要目的是作为 bean 定义的资源。 被@Configuration 声明的类可以通过在同一个类的内部调用@bean 方法来设置嵌入 bean 的依赖关 系。
6、怎样用注解的方式配置 Spring?
1.@Required:该注解应用于设值方法。
2.@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
3.@Qualifier:该注解和@Autowired 注解搭配使用,用于消除特定 bean 自动装配的歧义。
4.JSR-250 Annotations:Spring 支持基于 JSR-250 注解的以下注解,@Resource、@PostConstruct 和 @PreDestroy。
7、请解释 Spring Bean 的生命周期?
8、Spring Bean 作用域之间的区别?
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 作用域效果相同。
9、Spring 框架中的单例 Beans 是线程安全的么?
10、FileSystemResource 和 ClassPathResource 有何区别?
11、Spring 框架中都用到了哪些设计模式?
1、代理模式—在 AOP 和 remoting 中被用的比较多。
2、单例模式:在 spring 配置文件中定义的 bean 默认为单例模式。
3、模板模式:用来解决代码重复的问题。 比如. RestTemplate, JmsTemplate, JpaTemplate。
4、委派模式:Srping 提供了 DispatcherServlet 来对请求进行分发。
5、工厂模式:BeanFactory 用来创建对象的实例,贯穿于 BeanFactory / ApplicationContext 接 口的核心理念。
6、代理模式:AOP 思想的底层实现技术,Spring 中采用 JDK Proxy 和 CgLib 类库。
12、在 Spring 框架中如何更有效的使用 JDBC?
使用 Spring JDBC 框架,资源管理以及错误处理的代价都会减轻。开发人员只需通过 statements 和 queries 语句从数据库中存取数据。Spring 框架中通过使用模板类能更有效的使用 JDBC,也就是所谓 的 JdbcTemplate。
13、请解释下 Spring 框架中的 IOC?
BeanFactory 接 口 提 供 了 一 个 先 进 的 配 置 机 制 , 使 得 任 何 类 型 的 对 象 的 配 置 成 为 可 能 。 ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上 添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于 国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext。