- 1、Spring 框架是什么?
2、Spring 常用的注解有哪些?
3、Spring 框架的好处有哪些?
4、Spring 由哪些主要模块组成?
5、Spring IOC 容器是什么?
6、Spring IOC 的好处有哪些?
7、BeanFactory 和 ApplicationContext 的区别?
8、Spring 依赖注入是什么?
9、Spring 依赖注入有哪几种方式?
10、Spring bean 支持哪几种作用域?
11、Spring bean 生命周期是怎样的?
12、Spring bean 为什么默认为单例?
13、Spring bean 是线程安全的吗?
14、Spring 这几个注解的区别?
15、Spring @Autowired 注解有什么用?
16、Spring @Required 注解有什么用?
17、Spring @Qualifier 注解有什么用?
18、Spring 怎么注入 Java 集合类型?
19、Spring 装配是指什么?
20、Spring 自动装配有哪些方式?
21、Spring 自动装配有什么局限性?
22、Spring AOP 是什么?- https://www.cnblogs.com/cxuanBlog/p/13060510.html">https://www.cnblogs.com/cxuanBlog/p/13060510.html
23、Spring AOP 有什么作用?
24、Spring AOP 有哪些实现方式?
25、Spring AOP 和 AspectJ AOP 的区别?
26、Spring 支持哪些事务管理类型?
27、Spring 框架用到了哪些设计模式?
28、Spring MVC 框架有什么用?
29、Spring MVC DispatcherServlet 的工作流程?
30、Spring MVC 常用的注解有哪些?
31、Spring MVC @RequestMapping 有啥用?
1、Spring 框架是什么?
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。任何 Java 应用都可以从 Spring 中受益。Spring 的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EE full-stack(一站式) 轻量级开源框架。
1、轻量级:与EJB对比,依赖资源少,销毁的资源少。
2、一站式,每一个层都提供的解决方案
2、Spring 常用的注解有哪些?
一.用于创建对象的注解
作用:和在xml配置文件中编写一个
1.@Component : 用于把当前类对象存入Spring容器中。
属性:value —- 用于指定bean的id。如果不写该属性,id的默认值是当前类名,且首字母改为小写。
2.@Controller : 一般用在表现层。
3.@Service : 一般用在业务层。
4.@Repository : 一般用在持久层(dto层)。
备注:其中2,3,4注解的作用和属性与@Component 一模一样,他们三个是Spring框架为我们提供的三层架构使用的注解,使我们对三层对象更加清晰。
二.用于注入数据的注解
作用:和在xml配置文件中的
1.@Autowired : 自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。可以作用在变量或者方法上。
2.@Qualifier : 在按照类型注入的基础之上再按照名称注入,它在给类成员注入时要和@Autowired配合使用,但是在给方法参数注入是可以单独使用。
3.@Resource : 直接按照bean的id注入,可以独立使用。
属性:name —- 用于指定bean的id。
备注:以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。另外,集合类型的注入只能通过xml来实现。
4.@Value : 用于注入基本类型和String类型的数据。
属性:value —- 用于指定数据的值,它可以使用Spring中的SpEL(也就是Spring中的el表达式)。SpEL的写法:${表达式}
三.用于改变作用范围的注解
作用:和在xml配置文件中的
1.@Scope : 用于指定bean的作用范围。
属性:value —- 指定范围的取值。常用取值:singleton(单例)和prototype(多例)。
四.和生命周期相关的注解
作用:和在xml配置文件中的
1.@PreDestory : 用于指定销毁方法。
2.@PostConstruct : 用于指定初始化方法。
五.Spring新注解
1.@Configuration : 用于指定当前类是一个配置类。
2.@ComponentScan : 用于通过注解指定Spring在创建容器时要扫描的包。
3.@Bean : 用于把当前方法的返回值作为bean对象存入Spring的IOC容器中。
属性:name —- 用于指定bean的id。当不写时,默认值为当前方法的名称。
4.@Import : 用于导入其他的配置类。
属性:value —- 用于指定其他配置类的字节码。当我们使用@Import注解时,有@Import注解的类就是父配置类。
5.@PropertySource : 用于指定properties文件的位置。
属性:value —- 指定文件的名称和路径。关键字classpath表示类路径下。
3、Spring 框架的好处有哪些?
4、Spring 由哪些主要模块组成?
IOC:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring Context:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
5、Spring IOC 容器是什么?
Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans,我们将在下一章中进行讨论。
通过阅读配置元数据提供的指令,容器知道对哪些对象进行实例化,配置和组装。配置元数据可以通过 XML,Java 注释或 Java 代码来表示。下图是 Spring 如何工作的高级视图。 Spring IoC 容器利用 Java 的 POJO 类和配置元数据来生成完全配置和可执行的系统或应用程序。
IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而”控制反转”是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。
6、Spring IOC 的好处有哪些?
(1)少写很多的new(表面上的确这样)
(2)之所以少写new,是因为系统的配置(即第三方的管理)
(3)面向接口,符合OO
(4)系统的可扩展与代码的易维护
7、BeanFactory 和 ApplicationContext 的区别?
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。<br />(1)BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:
①继承MessageSource,因此支持国际化。
②统一的资源文件访问方式。
③提供在监听器中注册bean的事件。
④同时加载多个配置文件。
⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
(2)①BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
②ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
③相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。<br />(3)BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。
(4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。
8、Spring 依赖注入是什么?
依赖注入, 是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是 依赖于外部的 注入。Spring的 依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间 依赖关系的管理。
9、Spring 依赖注入有哪几种方式?
10、Spring bean 支持哪几种作用域?
singleton、prototype、request、session 和 global session
11、Spring bean 生命周期是怎样的?
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
-
12、Spring bean 为什么默认为单例?
13、Spring bean 是线程安全的吗?
14、Spring 这几个注解的区别?
15、Spring @Autowired 注解有什么用?
16、Spring @Required 注解有什么用?配置在set方法上,表示在xml配置bean要把property属性塞进去,否则抛bean初始化异常
17、Spring @Qualifier 注解有什么用?如果创建了多个相同类型的Bean,那么Spring在初始化IOC容器时,不知道应该装配那个Bean,这时候可以使用 @Qualifier 注解来指定应该装配哪个具体的Bean,主要作用是指定装配的Bean,避免歧义。
18、Spring 怎么注入 Java 集合类型?- 、
元素使用的是 赋值;
19、Spring 装配是指什么?构造注入和setter注入有时在做配置时比较麻烦。所以框架为了提高开发效率,提供自动装配功能,用于简化配置。而所谓的自动装配,指的是spring容器依据某种规则(自动装配的规则,有五种),自动建立对象之间的依赖关系。而spring框架式默认不支持自动装配的,要想使用自动装配,则需要修改spring配置文件中
标签的autowire属性。
20、Spring 自动装配有哪些方式?1)no:
不支持自动装配功能。
2)default:
表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。
3)byName:
当一个bean节点带有 autowire=”byName” 的属性时:
①将查找其类中所有属性。
②去配置文件中查找是否存在id名称与属性名称相同的bean。
③如果有,就取得该bean对象,并调用属性所在类中的setter方法,将找到的bean注入;找不到注入null。
注意:不可能找到多个符合条件的bean(id唯一)
4)byType:
当一个bean节点带有 autowire=”byType” 的属性时:
①将查找其类中所有属性。
②去配置文件中查找是否存在bean类型与属性类型相同的bean。
③如果有,就取得该bean对象,并调用属性所在类中的setter方法,将找到的bean注入;找不到注入null。
注意:找到多个符合条件的bean时会报错。
5)constructor:
使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。即:根据构造方法的参数的数据类型,进行 byType 模式的自动装配。
21、Spring 自动装配有什么局限性? 在property和constructor-arg设置中的依赖总是重载自动装配,我们无法对原始类型(如 int,long,boolean 等就是首字母小写的那些类型),还有 String,Classes 做自动装配。这是受限于设计。
- 自动装配跟直接装配(explicit wiring)相比较,在准确性方便还是差那么点,虽然没有明确地说明,但是 Spring 还是尽量避免这种模棱两可的情况,导致出现没预料到的结果。
- Spring 容器生成文档的工具可能会不能使用装配的信息。
- 容器中多个 bean 的定义可能要对setter和构造器参数做类型匹配才能做依赖注入,虽然对于 array,collection 和 map 来说不是啥问题,但是对于只有单一值的依赖来讲,这就有点讲不清楚了,所以如果没有唯一的 bean 定义,那只能抛出异常。
面向切面编程(Aspect-oriented Programming,俗称AOP)提供了一种面向对象编程(Object-oriented Programming,俗称OOP)的补充,面向对象编程最核心的单元是类(class),然而面向切面编程最核心的单元是切面(Aspects)。与面向对象的顺序流程不同,AOP采用的是横向切面的方式,注入与主业务流程无关的功能,例如事务管理和日志管理。
22、Spring AOP 是什么?
Spring的一个关键组件是AOP框架。 虽然Spring IoC容器不依赖于AOP(意味着你不需要在IOC中依赖AOP),但AOP为Spring IoC提供了非常强大的中间件解决方案。
AOP 是一种编程范式,最早由 AOP 联盟的组织提出的,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。它是 OOP的延续。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
我们之间的开发流程都是使用顺序流程,那么使用 AOP 之后,你就可以横向抽取重复代码
https://www.cnblogs.com/cxuanBlog/p/13060510.html
23、Spring AOP 有什么作用?
24、Spring AOP 有哪些实现方式?
静态织入(AspectJ 实现)和动态代理(Spring AOP实现)
JDK动态代理:Spring AOP的首选方法。 每当目标对象实现一个接口时,就会使用JDK动态代理。目标对象必须实现接口
CGLIB代理:如果目标对象没有实现接口,则可以使用CGLIB代理。
25、Spring AOP 和 AspectJ AOP 的区别?
26、Spring 支持哪些事务管理类型?
27、Spring 框架用到了哪些设计模式?
28、Spring MVC 框架有什么用?
29、Spring MVC DispatcherServlet 的工作流程?
30、Spring MVC 常用的注解有哪些?
Controller
注解一个类表示控制器,Spring MVC会自动扫描标注了这个注解的类。
RequestMapping
请求路径映射,可以标注类,也可以是方法,可以指定请求类型,默认不指定为全部接收。
RequestParam
放在参数前,表示只能接收参数a=b格式的数据,即Content-Type为application/x-www-form-urlencoded类型的内容。
RequestBody
放在参数前,表示参数从request body中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即Content-Type不为application/x-www-form-urlencoded类型的内容。
ResponseBody
放在方法上或者返回类型前,表示此方法返回的数据放在response body里面,而不是跳转页面。一般用于ajax请求,返回json数据。
RestController
这个是Controller和ResponseBody的组合注解,表示@Controller标识的类里面的所有返回参数都放在response body里面。
PathVariable
路径绑定变量,用于绑定restful路径上的变量。
@RequestHeader
放在方法参数前,用来获取request header中的参数值。
@CookieValue;
放在方法参数前,用来获取request header cookie中的参数值。
GetMapping PostMapping PutMapping..
*Mapping的是Spring4.3加入的新注解,表示特定的请求类型路径映射,而不需要写RequestMethod来指定请求类型。