持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
什么是Spring框架?
Spring是一个为了简化企业级开发的开源框架。特性是IOC和AOP,控制反转和面向切面编
程。是非侵入式的,基于Spring开发的应用,其中的对象可以不依赖于Spring的API。
Spring包含的模块有哪些?
Core Container是Spring的核心模块,主要提供IoC依赖注入功能。具体的有:
- spring-core:Spring框架基本的核心组件,包含很多关键类。
- spring-beans:提供对bean的创建、解析等功能的支持。
- spring-context:给Spring提供一个运行时环境,保存各个对象的状态和相互的依赖关系。
AOP模块,具体有:
- spring-aspects :该模块为 AspectJ 的集成提供支持。
- spring-aop :提供对面向切面的编程的支持。
Data Access/Integration模块,与数据交互相关的模块,具体有:
- spring-jdbc :提供了对数据库访问的 JDBC。
- spring-tx :提供对事务的支持。
- spring-orm : 提供对 Hibernate、MyBatis、iBatis 等 ORM 框架的支持。
Spring Web模块,具体有:
- spring-web :对 Web 功能的实现提供一些最基础的支持。
- spring-webmvc : 提供对 Spring MVC 的实现。
Spring Test
- spring-test:提供对常用的单元测试框架的支持。
Spring、SpringMVC、SpringBoot之间有什么关系?
- Spring 包含了多个模块,最重要的是 Spring-Core(主要提供 IoC 依赖注入功能的支持) 模块, Spring 中的其他模块的功能实现基本都需要依赖于该模块。
- Spring MVC 是 Spring 中的一个很重要的模块,主要赋予 Spring 快速构建 MVC 架构的 Web 程序的能力。MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。
- Spring Boot可以简化很多Spring MVC 的配置。但是在需要构建MVC架构的程序时,还是需要使用Spring MVC作为MVC框架。
谈谈自己对IoC的理解?
IoC是一种设计思想,将创建对象的控制权由程序员转交给Spring框架来管理。将对象之间的依赖关系交给IoC容器,降低了对象之间的依赖程度,并由IoC容器完成对象的注入。IoC最常见的一种实现方式叫做依赖注入(DI)。
可以使用配置文件的方式初始化IoC容器:
<!-- 注册上下文参数,指定读取的spring配置文件位置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <!-- 注册ContextLoaderListener,初始化了IoC容器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>也可以直接使用代码:
//创建ioc容器 ApplicationContext ioc = new ClassPathXmlApplicationContext("spring.xml");
什么是Spring Bean?
Bean就代指被IoC容器所管理的对象。我们告诉IoC容器需要管理的对象,可以通过XML文件/注解来配置。
将类声明为Bean 的注解有哪些?
@Component:普通组件,可标注任意类为Spring组件。@Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。@Service: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。@Controller: 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
@Component 和 @Bean 的区别是什么?
- @Component注解作用于类,@Bean注解作用于方法。
- @Component通过组件扫描来自动检测和装配到Spring容器中。@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
- 在使用第三方类库中的类要装配到Spring容器时,只能使用@Bean注解。
注入Bean 的注解有哪些
Spring 内置的 @Autowired 以及 JDK 内置的 @Resource 和 @Inject 都可以用于注入 Bean。
@Autowired 和 @Resource 的区别是什么?
@Autowired是Spring内置的注解,默认注入方式为byType,但是如果一个接口存在多个实现类,就会使用byName进行匹配,名称通常就是类名首字母小写。建议在使用时通过@Qulifier注解来显式指定对应匹配的实现类名称而不依赖变量名称。
@Resource默认注入方式为 byName。如果无法通过名称匹配到对应的 Bean 的话,注入方式会变为byType。