关于spring的知识点总结了一个脑图分享给大家
1、不同版本的 Spring Framework 有哪些主要功能?
2、什么是 Spring Framework?
3、列举 Spring Framework 的优点。
4、Spring Framework 有哪些不同的功能?
5、Spring Framework 中有多少个模块,它们分别是什么?
· Spring Core
· Spring Bean
· SpEL (Spring Expression Language)
· Spring Context
· JDBC (Java DataBase Connectivity)
· ORM (Object Relational Mapping)
· OXM (Object XML Mappers)
· JMS (Java Messaging Service)
· Transaction
· Web
· Web – Servlet
· Web – Socket
· Web – Portlet
· 该层支持面向切面编程
· 该层为类检测和类加载器实现提供支持。
· 该层为使用 JUnit 和 TestNG 进行测试提供支持。
Messaging – 该模块为 STOMP 提供支持。它还支持注解编程模型,该模型用于从WebSocket 客户端路由和处理 STOMP 消息。
Aspects – 该模块为与 AspectJ 的集成提供支持。
6、什么是 Spring 配置文件?
7、Spring 应用程序有哪些不同组件?
· 接口 - 定义功能。
· Bean 类 - 它包含属性,setter 和 getter 方法,函数等。
· Spring 面向切面编程(AOP) - 提供面向切面编程的功能。
· Bean 配置文件 - 包含类的信息以及如何配置它们。
· 用户程序 - 它使用接口。
8、使用 Spring 有哪些方式?
· 作为一个成熟的 Spring Web 应用程序。
· 作为第三方 Web 框架,使用 Spring Frameworks 中间层。
· 用于远程使用。
· 作为企业级 Java Bean,它可以包装现有的 POJO(Plain Old JavaObjects)。
9、什么是 Spring IOC 容器?
10、什么是依赖注入?
中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC
容器将它们装配在一起。
11、可以通过多少种方式完成依赖注入?
· 构造函数注入
· setter 注入
· 接口注入
在 Spring Framework 中,仅使用构造函数和 setter 注入。
12、区分构造函数注入和 setter 注入。
13、spring 中有多少种 IOC 容器?
ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。
14、区分 BeanFactory 和 ApplicationContext。
15、列举 IoC 的一些好处。
· 它将最小化应用程序中的代码量。
· 它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例或 JNDI 查找机制。
· 它以最小的影响和最少的侵入机制促进松耦合。
· 它支持即时的实例化和延迟加载服务。
16、Spring IoC 的实现机制。
示例:
interface Fruit {
public abstract void eat();
}
class Apple implements Fruit {
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat(){
System.out.println("Orange");
}
}
class Factory {
public static Fruit getInstance(String ClassName) {
Fruit f=null;
try {
f=(Fruit)Class.forName(ClassName).newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a) {
Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
if(f!=null){
f.eat();
}
}
}复制代码
17、什么是 spring bean?
· Bean 由 Spring IoC 容器管理。
· 它们由 Spring IoC 容器实例化,配置,装配和管理。
· Bean 是基于用户提供给容器的配置元数据创建。
18、spring 提供了哪些配置方式?
bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。例如:
<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
<property name="name" value="Edureka"></property>
</bean>复制代码
您可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配。因此,您需要在使用它之前在 Spring 配置文件中启用它。例如:
<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>复制代码
(1) @Bean 注解扮演与 <bean/> 元素相同的角色。
(2) @Configuration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 bean 间依赖关系。
例如:
@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}复制代码
19、spring 支持集中 bean scope?
Singleton - 每个 Spring IoC 容器仅有一个单实例。Prototype - 每次请求都会产生一个新的实例。Request - 每一次 HTTP 请求都会产生一个新的实例,并且该 bean 仅在当前 HTTP 请求内有效。Session - 每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。
Global-session - 类似于标准的 HTTP Session 作用域,不过它仅仅在基于portlet 的 web 应用中才有意义。Portlet 规范定义了全局 Session 的概念,它被所有构成某个 portlet web 应用的各种不同的 portlet 所共享。在 globalsession 作用域中定义的 bean 被限定于全局 portlet Session 的生命周期范围内。如果你在 web 中使用 global session 作用域来标识 bean,那么 web会自动当成 session 类型来使用。
仅当用户使用支持 Web 的 ApplicationContext 时,最后三个才可用。
20、spring bean 容器的生命周期是什么样的?
(1)Spring 容器根据配置中的 bean 定义中实例化 bean。
(2)Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。
(3)如果 bean 实现BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用setBeanName()。
(4)如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。
(5)如果存在与 bean 关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization() 方法。
(6)如果为 bean 指定了 init 方法( <bean> 的 init-method 属性),那么将调
用它。
(7)最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。
(8)如果 bean 实现DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。
(9)如果为bean 指定了 destroy 方法( <bean> 的 destroy-method 属性),那么将
调用它。
21、什么是 spring 的内部 bean?
例如,假设我们有一个 Student 类,其中引用了 Person 类。这里我们将只创建一个 Person 类实例并在 Student 中使用它。
Student.java
public class Student {
private Person person;
//Setters and Getters
}
public class Person {
private String name;
private String address;
//Setters and Getters
}复制代码
<bean id=“StudentBean" class="com.edureka.Student">
<property name="person">
<!--This is inner bean -->
<bean class="com.edureka.Person">
<property name="name" value=“Scott"></property>
<property name="address" value=
“Bangalore"></property>
</bean>
</property>
</bean>复制代码
22、什么是 spring 装配
23、自动装配有哪些方式?
自动装配的不同模式:
no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。
byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML文件中由相同名称定义的 bean。
byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。构造函数- 它通过调用类的构造函数来注入依赖项。它有大量的参数。
autodetect - 首先容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自动装配。
24、自动装配有什么局限?
25、什么是基于注解的容器配置
@Bean 注解扮演与 元素相同的角色。 @Configuration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 bean 间依赖关系。
例如:
@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}复制代码
26、如何在 spring 中启动注解装配?
27、@Component, @Controller, @Repository,@Service 有何区别?
28、@Required 注解有什么用?
示例:
public class Employee {
private String name;
@Required
public void setName(String name){
this.name=name;
}
public string getName(){
return name;
}
}复制代码
29、@Autowired 注解有什么用?
public class Employee {
private String name;
@Autowired
public void setName(String name) {
this.name=name;
}
public string getName(){
return name;
}
}复制代码
30、@Qualifier 注解有什么用?
例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount中,使用@Qualifier 指定了必须装配 id 为 emp1 的 bean。
Employee.java
public class Employee {
private String name;
@Autowired
public void setName(String name) {
this.name=name;
}
public string getName() {
return name;
}
}复制代码
public class EmpAccount {
private Employee emp;
@Autowired
@Qualifier(emp1)
public void showName() {
System.out.println(“Employee name : ”+emp.getName);
}
}复制代码
31、@RequestMapping 注解有什么用?
32、spring DAO 有什么用?
33、列举 Spring DAO 抛出的异常。
34、spring JDBC API 中存在哪些类?
· SimpleJdbcTemplate
· NamedParameterJdbcTemplate
· SimpleJdbcInsert
· SimpleJdbcCall
35、使用 Spring 访问 Hibernate 的方法有哪些?
1、 使用 Hibernate 模板和回调进行控制反转
2、 扩展 HibernateDAOSupport 并应用 AOP 拦截器节点
36、列举 spring 支持的事务管理类型
(1)程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。
(2) 声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML的配置来管理事务。
37、spring 支持哪些 ORM 框架
· iBatis
· JPA
· JDO
· OJB
38、什么是 AOP?
39、什么是 Aspect?
(1)如何通过 pointcut 和 advice 定位到特定的 joinpoint 上
(2)如何在advice 中编写切面代码.
40、什么是切点(JoinPoint)
41、什么是通知(Advice)?
42、有哪些类型的通知(Advice)?
· After Returning - 这些类型的 Advice 在连接点方法正常执行后执行,并使用@AfterReturning 注解标记进行配置。
· After Throwing - 这些类型的 Advice 仅在 joinpoint 方法通过抛出异常退出并使用 @AfterThrowing 注解标记配置时执行。
· After (finally) - 这些类型的 Advice 在连接点方法之后执行,无论方法退出是正常还是异常返回,并使用 @After 注解标记进行配置。
· Around - 这些类型的 Advice 在连接点之前和之后执行,并使用@Around 注解标记进行配置。
43、指出在 spring aop 中 concern 和 cross-cuttingconcern 的不同之处。
cross-cutting concern 是一个适用于整个应用的行为,这会影响整个应用程序。例如,日志记录,安全性和数据传输是应用程序几乎每个模块都需要关注的问题,因此它们是跨领域的问题。
44、AOP 有哪些实现方式?
指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;
· 编译时编织(特殊编译器实现)
· 类加载时编织(特殊的类加载器实现)。
在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
· JDK 动态代理
· CGLIB
45、Spring AOP and AspectJ AOP 有什么区别?
46、如何理解 Spring 中的代理?
Advice + Target Object = Proxy
47、什么是编织(Weaving)?
48、Spring MVC 框架有什么用?
49、描述一下 DispatcherServlet 的工作流程
(2) DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以HandlerExecutionChain 对象的形式返回。
(3) DispatcherServlet 根据获得的 Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(...)方法)。
(4)提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler( Controller)。在填充 Handler 的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:
· HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。
· 数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等。
· 数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。
· 数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult 或 Error 中。
(5)Handler(Controller)执行完成后,向 DispatcherServlet 返回一个ModelAndView 对象;
(6)根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet。
(7) ViewResolver 结合 Model 和 View,来渲染视图。
(8)视图负责将渲染结果返回给客户端。
50、介绍一下 WebApplicationContext
51、什么是 spring?
52、使用 Spring 框架的好处是什么?
· 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
· 面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
· 容器:Spring 包含并管理应用中对象的生命周期和配置。
· MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。
· 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
· 异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC,Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。
53、Spring 由哪些模块组成?
· Core module
· Bean module
· Context module
· Expression Language module
· JDBC module
· ORM module
· OXM module
· Java Messaging Service(JMS) module
· Transaction module
· Web module
· Web-Servlet module
· Web-Struts module
· Web-Portlet module
54、核心容器(应用上下文) 模块。
55、BeanFactory – BeanFactory 实现举例。
最常用的 BeanFactory 实现是 XmlBeanFactory 类。
66、XMLBeanFactory
67、解释 AOP 模块
68、解释 JDBC 抽象和 DAO 模块。
69、解释对象/关系映射集成模块。
70、解释 WEB 模块。
72、Spring 配置文件
73、什么是 Spring IOC 容器?
74、IOC 的优点是什么?
75、ApplicationContext 通常的实现是什么?
· ClassPathXmlApplicationContext:此容器也从一个 XML 文件中加载 beans 的定义,这里,你需要正确设置 classpath 因为这个容器将在 classpath里找 bean 配置。
· WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定义了一个 WEB 应用的所有 bean。
76、Bean 工厂和 Application contexts 有什么区别?
77、一个 Spring 的应用看起来象什么?
· 这实现包括属性,它的 Setter , getter 方法和函数等。
· Spring AOP。
· Spring 的 XML 配置文件。
· 使用以上功能的客户端程序。依赖注入
78、什么是 Spring 的依赖注入?
79、有哪些不同类型的 IOC(依赖注入)方式?
· Setter 方法注入:Setter 方法注入是容器通过调用无参构造器或无参static 工厂 方法实例化 bean 之后,调用该 bean 的 setter 方法,即实现了基于 setter 的依赖注入。
80、哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?
81.什么是 Spring beans?
Spring 框架定义的 beans 都是单件 beans。在 bean tag 中有个属性”singleton”,如果它被赋为 TRUE,bean 就是单件,否则就是一个 prototypebean。默认是 TRUE,所以所有在 Spring 框架中的 beans 缺省都是单件。
82、一个 Spring Bean 定义 包含什么?
83、如何给 Spring 容器提供配置元数据?
(1)XML 配置文件。
(2)基于注解的配置。
(3)基于 java 的配置。
84、你怎样定义类的作用域?
85、解释 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 的作用域是 Singleton.
86、Spring 框架中的单例 bean 是线程安全的吗?
87、解释 Spring 框架中 bean 的生命周期。
· Spring 根据 bean 的定义填充所有的属性。
· 如果 bean 实现了 BeanNameAware 接口,Spring 传递 bean 的 ID 到setBeanName 方法。
· 如果 Bean 实现了 BeanFactoryAware 接口, Spring 传递beanfactory 给 setBeanFactory 方法。
· 如果有任何与 bean 相关联的 BeanPostProcessors,Spring 会在postProcesserBeforeInitialization()方法内调用它们。
· 如果 bean 实现 IntializingBean 了,调用它的 afterPropertySet 方法,如果 bean 声明了初始化方法,调用此初始化方法。
· 如果有 BeanPostProcessors 和 bean 关联,这些 bean 的postProcessAfterInitialization() 方法将被调用。
· 如果 bean 实现了 DisposableBean,它将调用 destroy()方法。
88、哪些是重要的 bean 生命周期方法?你能重载它们吗?
89、什么是 Spring 的内部 bean?
90、在 Spring 中如何注入一个 java 集合?
· 类型用于注入一列值,允许有相同的值。
· 类型用于注入一组值,不允许有相同的值。
· 类型用于注入一组键值对,键和值都可以为任意类型。
· 类型用于注入一组键值对,键和值都只能为 String 类型。
91、什么是 bean 装配?
92、什么是 bean 的自动装配?
93、解释不同方式的自动装配 。
· no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
· byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
· byType::通过参数类型自动装配,Spring 容器在配置文件中发现 bean的 autowire 属性被设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。
· constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
· autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。
94.自动装配有哪些局限性 ?
· 重写:你仍需用 和 配置来定义依赖,意味着总要重写自动装配。
· 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。
· 模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
95、你可以在 Spring 中注入一个 null 和一个空字符串吗?
96、什么是基于 Java 的 Spring 注解配置? 给一些注解的例子.
以@Configuration 注解为例,它用来标记类可以当做一个 bean 的定义,被Spring IOC 容器使用。另一个例子是@Bean 注解,它表示此方法将要返回一个对象,作为一个 bean 注册进 Spring 应用上下文。
97、什么是基于注解的容器配置?
开发者通过在相应的类,方法或属性上使用注解的方式,直接组件类中进行配置,而不是使用xml 表述 bean 的装配关系。
98、怎样开启注解装配?
99、@Required 注解
100、@Autowired 注解
101、@Qualifier 注解
@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean。
102.在 Spring 框架中如何更有效地使用 JDBC?
103、JdbcTemplate
104、Spring 对 DAO 的支持
105、使用 Spring 通过什么方式访问 Hibernate?
· 控制反转 Hibernate Template 和 Callback。
· 继承 HibernateDAOSupport 提供一个 AOP 拦截器。
106、Spring 支持的 ORM
· Hibernate
· iBatis
· JPA (Java Persistence API)
· TopLink
· JDO (Java Data Objects)
· OJB
107.如何通过 HibernateDaoSupport 将 Spring 和 Hibernate结合起来?
· 配置 the Hibernate SessionFactory。
· 继承 HibernateDaoSupport 实现一个 DAO。
· 在 AOP 支持的事务中装配。
108、Spring 支持的事务管理类型
· 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
· 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和 XML 配置来管理事务。
109、Spring 框架的事务管理有哪些优点?
· 它为编程式事务管理提供了一套简单的 API 而不是一些复杂的事务 API如
· 它支持声明式事务管理。
· 它和 Spring 各种数据访问抽象层很好得集成。
110、你更倾向用那种事务管理类型?
111、解释 AOP
112、Aspect 切面
113、在 Spring AOP 中,关注点和横切关注的区别是什么?
114、连接点
115、通知
Spring 切面可以应用五种类型的通知:
· before:前置通知,在一个方法执行前被调用。
· after: 在方法执行之后调用的通知,无论方法执行是否成功。
· after-returning: 仅当方法成功完成后执行的通知。
· after-throwing: 在方法抛出异常退出时执行的通知。
· around: 在方法执行之前和之后调用的通知。
116、切点
117、什么是引入?
118、什么是目标对象?
119、什么是代理?
120、有几种不同类型的自动代理?
(2)DefaultAdvisorAutoProxyCreator
(3)Metadata autoproxying
121、什么是织入。什么是织入应用的不同点?
122、解释基于 XML Schema 方式的切面实现。
123、解释基于注解的切面实现
124、什么是 Spring 的 MVC 框架?
125、DispatcherServlet
126、WebApplicationContext
127、什么是 Spring MVC 框架的控制器?
128、@Controller 注解
129、@RequestMapping 注解
最后
喜欢文章记得关注我点个赞哟,感谢支持!




近期评论