Spring boot 配置优先级,bean管理,SpringBoot原理,起步依赖,自动配置,组件扫描,SSM 使用 总结

Spring boot 原理 总结

一。 配置优先级
01.properties、yaml、yml三种配置文件,优先级最高的是properties
配置文件优先级排名(从高到低):

  1. properties配置文件
  2. yml配置文件
  3. yaml配置文件

02.除了以上3种配置文件外,SpringBoot为了增强程序的扩展性,除了支持配置
文件的配置方式以外,还支持另外两种常见的配置方式:

  1. Java系统属性配置 (格式: -Dkey=value) -Dserver.port=9000
  2. 命令行参数 (格式:--key=value) --server.port=10010

03.优先级: 命令行参数 > 系统属性参数 > properties参数 > yml参数 > yaml参数

使用命令:java -jar 方式运行jar文件程序:
java -jar springboot-web1.0-SNAPSHOT.jar --server.port=10010
java -Dserver.port=9000 -jar springboot-web1.0-SNAPSHOT.jar

04.SpringBoot项目当中,常见的属性配置方式有5种:
application.yaml(忽略)
application.yml
application.properties
java系统属性(-Dxxx=xxx)
命令行参数(--xxx=xxx)

二。bean管理
01.@Component三个衍
生注解(@Controller、@Service、@Repository)来声明IOC容器中的bean对象

02.IOC容器中Bean的其他使用细节:
1 如何从IOC容器中手动的获取到bean对象
2. bean的作用域配置
3. 管理第三方的bean对象

03.默认情况下,SpringBoot项目在启动的时候会自动的创建IOC容器(也称为Spring容器),并且在启动
的过程当中会自动的将bean对象都创建好,存放在IOC容器当中。应用程序在运行时需要依赖什么bean
对象,就直接进行依赖注入就可以.

04.在Spring容器中提供了一些方法,可以主动从IOC容器中获取到bean对象,下面介绍3种常用方式:
根据name获取bean:Object getBean(String name)
根据类型获取bean: T getBean(Class requiredType)
根据name获取bean(带类型转换): T getBean(String name, Class requiredType)

05.bean作用域:IOC容器当中,默认bean对象是单例模式(只有一个实例对象)
在Spring中支持五种作用域,后三种在web环境才生效:
作用域 说明

singleton 容器内同名称的bean只有一个实例(单例)(默认)
prototype 每次使用该bean时会创建新的实例(非单例)
request 每个请求范围内会创建新的实例(web环境中,了解)
session 每个会话范围内会创建新的实例(web环境中,了解)
application 每个应用范围内会创建新的实例(web环境中,了解)

知道了bean的5种作用域了,我们要怎么去设置一个bean的作用域呢?
可以借助Spring中的@Scope注解来进行配置作用域:

@Scope("prototype")
@Lazy //延迟加载(第一次使用bean对象时,才会创建bean对象并交给ioc容器管理)
@RestController
@RequestMapping("/depts")
public class DeptController {

06.怎样使用并定义第三方的bean呢?
如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component 及衍生注解声明
bean的,就需要用到@Bean注解。
解决方案1:在启动类上添加@Bean标识的方法:

@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
 }

//声明第三方bean

@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
public SAXReader saxReader(){
return new SAXReader();
 }

 测试类调用:
 @Autowired
private SAXReader saxReader;
saxReader.read();

解决方案2:在配置类中定义@Bean标识的方法:
如果需要定义第三方Bean时, 通常会单独定义一个配置类:

@Configuration //配置类 (在配置类当中对第三方bean进行集中的配置管理)
public class CommonConfig {

    //声明第三方bean
    @Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean //通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
    public StAXStreamReader reader(DeptService deptService){
        return new StAXStreamReader();
    }
关于Bean大家只需要保持一个原则:

如果是在项目当中我们自己定义的类,想将这些类交给IOC容器管理,我们直接使用@Component
以及它的衍生注解来声明就可以。
如果这个类它不是我们自己定义的,而是引入的第三方依赖当中提供的类,而且我们还想将这个类
交给IOC容器管理。此时我们就需要在配置类中定义一个方法,在方法上加上一个@Bean注解,通
过这种方式来声明第三方的bean对象。

三。 SpringBoot原理
现基于SpringBoot进行web程序的开发是非常简单、非常高效的.

01.基于Spring框架进行项目的开发,会比较繁琐:
这个繁琐主要体现在两个地方:

  1. 在pom.xml中依赖配置比较繁琐,在项目开发时,需要自己去找到对应的依赖,还需要找到依赖
    它所配套的依赖以及对应版本,否则就会出现版本冲突问题。
  2. 在使用Spring框架进行项目开发时,需要在Spring的配置文件中做大量的配置,这就造成
    Spring框架入门难度较大,学习成本较高

02.基于Spring存在的问题,官方在Spring框架4.0版本之后(2013),又推出了一个全新的框架:SpringBoot(2014)。
通过 SpringBoot来简化Spring框架的开发(是简化不是替代)。我们直接基于SpringBoot来
构建Java项目,会让我们的项目开发更加简单,更加快捷。

03.SpringBoot框架之所以使用起来更简单更快捷,是因为SpringBoot框架底层提供了两个非常重要的
功能:一个是起步依赖,一个是自动配置。

起步依赖:解决了Spring框架当中依赖配置繁琐的问题(因为Maven的依赖传递,组依赖的代理:springboot-starter-web)
自动配置:大大的简化框架在使用时bean的声明以及bean的配置,起步依赖帮助配置所用到常见的配置.

引入依赖,版本匹配版本,
SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器
中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作.

自定义类,配置类,第3方类都可以是SpringIOC容器当中的一个bean对象.

04.SpringBoot项目中的@SpringBootApplication注解,具有包扫描的作用,但是它只会扫描启
动类所在的当前包以及子包。
当前包:com.alex, 第三方依赖中提供的包:com.example(扫描不到)

那么如何解决以上问题的呢?
方案1:@ComponentScan 组件扫描
方案2:@Import 导入(使用@Import导入的类会被Spring加载到IOC容器中)

@SpringBootApplication
@ComponentScan({"com.alex","com.example"}) //指定要扫描的包
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
 }
}

方案2:
@Import导入
导入形式主要有以下几种:

  1. 导入普通类
  2. 导入配置类
  3. 导入ImportSelector接口实现类
@Import(TokenParser.class) //导入的类会被Spring加载到IOC容器中
@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
 }

使用@Import导入配置类:

@Import(HeaderConfig.class) //导入配置类 HeaderConfig.class【添加@Configuration,方法添加@Bean】
@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class(args);
 }
 

05.自动配置的核心就在@SpringBootApplication注解上,SpringBootApplication这个注解
底层包含了3个注解,分别是:

@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration  //自动配置的核心,@Import注解,

自动配置类当中,所有的 bean都会加载到 spring 的
IOC 容器当中吗?其实并不会,它会根据 @Conditional 注解来进行条件装配。只有条件成立,它才会声明这
个bean,才会将这个 bean 交给 IOC 容器管理

06.SpringMVC不是一个单独的框架,它是Spring框架的一部分,是Spring框架中的web开发模
块,是用来简化原始的Servlet程序开发的。(SpringMVC=Springweb)

07.SSM,就是由:SpringMVC、Spring Framework、Mybatis三块组成
基于SpringBoot整合SSM进行项目开发.

Java 技术栈:
Spring、SpringBoot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Nginx、Git、Docker、GitHub、Servlet、JavaWeb、IDEA、Redis、算法等技术栈.

--------AOP-----

01.AOP面向方法编程,就可以做到在不改动这些原始方法的基础上,针对特定的方法进行功能的增强.无侵入性: 解耦
场景:记录方法执行的时间

02.AOP的优势:

  1. 减少重复代码
  2. 提高开发效率
  3. 维护方便

03.导入依赖:
1.在pom.xml中导入AOP的依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 编写AOP程序:针对于特定方法根据业务需要进行编程
    典型场景:
    1.记录系统的操作日志
    2.权限控制
    3.事务管理:我们前面所讲解的Spring事务管理,底层其实也是通过AOP来实现的,只要添加
    @Transactional注解之后,AOP程序自动会在原始方法运行前先来开启事务,在原始方法运行完
    毕之后提交或回滚事务.
posted @ 2023-06-30 17:17  大树2  阅读(1492)  评论(0编辑  收藏  举报