【学习笔记】Spring IoC

63 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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