Java二阶知识点总结(二)Spring与SpringBoot

1、Spring、SpringMVC和SpringBoot

  • Spring:主要指Spring Framework,主要包括控制反转(IOC)和面向切面(AOP)两大核心,以及其他各项功能模块,在实际应用中的主要用途就是简化开发和方便集成其他框架
  • SpringMVC:SpringMVC是一个Spring内置的MVC框架。servlet是java进行web开发的标准,而SpringMVC就是对Servlet深层次的封装,旨在简化这个过程
  • SpringBoot:SpringBoot是Spring开发更深一层的简化,旨在减少各种麻烦的配置文件,尽量做到开箱即用。有一个比喻说的很好,如果说程序是一辆汽车,那么Spring提供的就是各种各样的零件,你可以通过组装零件搭起来一辆汽车,让程序跑起来;但这个组装的过程很麻烦,因此出现了SpringBoot,SpringBoot的理念是通过约定大于配置的方式,先给你提供一辆汽车,让汽车快速跑起来,如果个人有需要,再自行配置零件。

2、IOC容器

  • 容器:是一种为某种特定组件的运行提供必要支持的一个软件环境,例如Tomcat为Servlet的运行提供了环境,Docker容器中包含了供程序运行的所有资源
  • IOC(Inversion of Control:控制反转)容器:即 将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,旨在解耦以及方便扩展
    • 控制:指的是对象创建(实例化、管理)的权力
    • 反转:控制权交给外部环境(Spring 框架、IoC 容器)
  • DI(Dependency Injection 依赖注入):和控制反转含义相同,它们是从两个角度描述的同一个概念,主要通过属性注入(无参,setter)和构造注入(有参,构造函数)

3、Spring Bean

1、简介

  • 简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象
  • SpringBean默认下是单例模式

2、将类声明为Bean的常用注解如下

  • @Component :通用的注解,可标注任意类为 Spring 组件
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面
  • @Bean:常和@Configuration注解搭配使用,用于显式声明单个bean,而不是让Spring像上面一样自动执行,可以更精细地自定义配置;一般用来注解方法,但其返回值是对象

3、注入Bean的常用注解如下

  • @Autowired:Autowired 属于 Spring内置的注解,默认的注入方式为byType(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类)
  • @Resource:@Resource属于 JDK 提供的注解,默认注入方式为 byName。如果无法通过名称匹配到对应的 Bean的话,注入方式会变为byType

4、Bean的生命周期

  • 总结起来,Spring的生命周期其实就是四个过程:实例化、属性赋值、初始化、销毁
  • 除此之外,在这四个基本阶段之外还有一些开放的接口,供加载bean的时候对bean做一些改变

4、AOP切面编程

  • AOP(Aspect Oriented Programming,面向切面编程):能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度
  • Spring AOP实质上就是动态代理,属运行时增强,而另一个框架AspectJ AOP则是通过扩展编译器的方式,在编译时增强
  • 通过@Before、@After、@AfterReturning等注解定义拦截器的方法以及拦截的类,然后通过@Component和@Aspect注解标记切面类

5、事务

事务是逻辑上的一组操作,要么都执行,要么都不执行

  • 事务管理的两种方式
    • 编程式事务 : 在代码中硬编码(不推荐使用) , 即通过代码手动实现事务的管理,实际中很少使用
    • 声明式事务 : 在 XML 配置文件中配置或者直接基于注解(推荐使用), 实际是通过 AOP 实现(基于@Transactional 的全注解方式使用最多)
  • 事务的传播行为:即业务层中,多个@transactional注解之间相互调用的事务问题,一共有7种
    • Spring中@Transactional注解默认使用的值为TransactionDefinition.PROPAGATION_REQUIRED,即没有则新建事务,有则加入当前事务
  • 事务的隔离级别:指针对多个事务访问相同数据时可能会出现的以下三种问题采取的策略
    • 脏读(提没提交):一个事务读到另一个事务中还未提交的数据
    • 幻读(存不存在):侧重于当前事务获取的数据集或影响的范围无法支撑后续的业务操作;例如查询某数据时发现没有,但插入数据时却又发现当前数据已存在,无法插入。这种像幻觉一样的现象称之为幻读。
    • 不可重复读(变没变化):同一个事务中,两次读取的结果不一致。

Spring默认的隔离级别是default,表示使用使用数据库默认的隔离级别,数据库隔离级别如下

  • MySQL 默认的隔离级别是 REPEATABLE_READ (可重复读)
  • Oracle 默认的隔离级别是 READ_COMMITTED (读已提交)

6、SpringBoot的核心注解

  • 核心注解是@SpringBootApplication,它包括了以下注解,其核心目的就是开启自动配置
    • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能
    • @EnableAutoConfiguration(核心):打开自动配置的功能,会根据类路径中的jar依赖为项目进行自动配置,如:添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,Spring Boot会对Tomcat和Spring MVC进行自动配置。其原理是在类路径的META-INF/spring.factories文件中找到所有的对应配置类,然后将这些自动配置类反射实例化,最后汇总为一个类加载到spring容器中
    • @ComponentScan:Spring组件扫描,即扫描各种被@Component、@Service、@Controller等注解配置过的组件

7、SpringBoot打成的jar包和普通的jar有什么区别

  • Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类
  • Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在\BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用

8、SpringBoot的启动流程

  • 加载Spring Boot框架:SpringBoot的启动依赖于Spring框架,首先需要加载SpringBoot和Spring框架的各种配置文件和类库。
  • 扫描和加载应用程序配置:SpringBoot会扫描应用程序的配置文件和注解,例如application.properties或application.yml等,根据其中的配置信息加载应用程序所需要的各种组件和服务。
  • 自动配置Spring应用程序:SpringBoot使用自动配置机制,根据应用程序的配置信息和依赖关系,自动配置应用程序所需要的各种组件和服务,例如Web服务器、数据库连接池、日志系统等。
  • 启动Spring应用程序:SpringBoot会启动Spring应用程序上下文,包括ApplicationContext和Servlet容器等,通过加载和初始化各种组件和服务,准备好应用程序的运行环境。
  • 运行Spring应用程序:Spring Boot启动后,应用程序就可以开始运行,监听来自客户端的请求,响应请求,并返回结果。

9、SpringBoot的核心配置文件

  • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud配置就会使用这个文件。且 boostrap 里面的属性不能被覆盖;
  • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置

10、SpringBoot常用注解

1、SpringMVC

  • @Entity:实体类,一个类对应一个数据库实体
  • @Mapper:Mapper类,主要是对数据库的操作
  • @Service:服务类,业务类代码和对dao的调用
  • @Controller:控制类,主要用于接收用户请求并调用Service层返回数据给前端

2、请求注解

  • @RequestMapping:用于处理url请求地址映射,也可以直接指定@GetMapping或@PostMapping
  • @RequestBody:读取Request请求的body部分中为json格式的数据,并自动将数据绑定到Java对象上去
  • @RequestParam:获取请求体中的查询参数,即指定名称的参数
  • @ReponseBody:可以将Java对象转换为json格式,并直接写入Response的Body中

3、其他注解

  • @Component:泛指组件,当组件不好归类为MVC中的哪一类时,可以用这个注解
  • @Configuration:配置类,程序启动时会执行里面的@Bean
  • @Bean:放在方法上面,意思是产生一个Bean交于Spring管理,相当于@AutoWired注入
  • @AutoWired:根据类型自动导入对象到类中
  • @Value:从application.yaml中读取数据
  • @Aspect:定义AOP的切点,执行对应的切面

参考

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值