专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

《深入浅出SpringBoot2.x》读书笔记

最近利用点闲散时间看了《深入浅出springboot2.x》这本书,用了很久的springboot了,也看看有没有没注意过的细节。

1、导图

102_1.png

2、备忘

2.1 自定义配置优先级

事实上, SpringBoot的参数配置除了使用 properties文件之外,还可以使用 yml文件等,它会以 下列的优先级顺序进行加载 :

  • 命令行参数
  • 来自 java:comp/env 的丹IDI 属性
  • Java 系统属性( System.getProperties())
  • 操作系统环境变 量
  • RandomValuePrope1tySource 配置 的 random.*属性值
  • jar包外部的 application-{profile}.properties 或 application.yml (带 spring.profile)配置文件
  • jar包内部的 application-{profile}.properties 或 application.yml (带 spring.profile)配置文件
  • jar包外部的 application.properties 或 application.yml (不带 spring.profile)配置文件
  • jar包内部的 application.properties 或 application.ym (不带 spring.profile)配置文件
  • @Configuration 注解类上的@PropertySource
  • 通过 SpringApplication.setDefaultProperties指定的默认属性

2.2 @Autowired注解

  • 默认byType注入,首先根据类型找对应的Bean,如果对应的类型Bean不是唯一的,那么根据属性名称和Bean名称进行匹配,如果匹配得上,就使用,否则,抛出异常。
    public class Dog implements Animal {   
    }

    public class Cat implements Animal {
    }

    @Autowire
    private Animal dog = null; //两个Animal的实现类,则根据名称dog注入Dog类

  • @Autowire(require=false) 允许找不到注入类,找不到时不抛出异常
  • 同类型情况下,@Primary注解的类会被优先注入
  • @Qualifier(“dog”)注解可以显示的指明注入类的名字

2.3 生命周期

102_2.png

2.4 作用域

102_3.png

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Scope(WebApplicationContext.SCOPE_REQUEST)
@Scope(WebApplicationContext.SCOPE_SESSION)
@Scope(WebApplicationContext.SCOPE_APPLICATION)

2.5 AOP

  • 通知: 就是我们编写的希望Aop时执行的那个方法。我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行。
  • 切点:切点就是我们我们配置的满足我们条件的目标方法。比如我们规定:名字前面是select开头的才执行我们自定义的通知方法。那么这些select开头的方法就是切点。
  • 连接点:连接点可以说是切点的全集。切点是连接点的子集。也可以理解为,连接点是我们没有定义那个select开头规则时,满足条件的全部的方法。
  • 切面:切面是切点和通知的组合称谓,就是变相给组合起了个名字。
@Aspect //切面
@Component
public class MyAspect {
    @Pointcut("execution(* com.fufu.demo.aop.HelloServiceImpl.sayHello(..))") //切点
    public void pointCut() {
    }

    @Before("pointCut()")
    public void before() { 
        // 前置通知
        System.out.printf("MyAspect Before...");
    }

    @Around("pointCut()")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { 
        // 环绕通知
        System.out.println("around before...");
        proceedingJoinPoint.proceed();
        System.out.println();
    }
}

  • @EnableAspectJAutoProxy

在完成了引入AOP依赖包后,一般来说并不需要去做其他配置。也许在Spring中使用过注解配置方式的人会问是否需要在程序主类中增加@EnableAspectJAutoProxy来启用,实际并不需要。

可以看下面关于AOP的默认配置属性,其中spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy

# AOP
spring.aop.auto=true # Add @EnableAspectJAutoProxy.
spring.aop.proxy-target-class=false # Whether subclass-based (CGLIB) proxies are to be created (true) as opposed to standard Java interface-based proxies (false).

而当我们需要使用CGLIB来实现AOP的时候,需要配置spring.aop.proxy-target-class=true,不然默认使用的是标准Java的实现。

  • @Order

@Order(1)

@Order(2)

@Order(3)

使用@Order注解可以指定切面的执行顺序,需要注意的是,对于前置通知都是从小到大运行的,对于后置通知和返回通知都是从大到小运行的,这是典型的责任链模式的顺序。

2.6 数据库

  • 数据源配置
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

Springboot 2.0 默认数据源为,com.zaxxer.hikari.HikariDataSource

  • mybatis

严格来说, Spring 项目本身的项目是不支持 MyBatis 的, 那是因为 Spring 3 在 即将发 布版本时 ,MyBatis 3 还没有正式版本,所以 Spring 的项目中都没有考虑MyBatis 的整合。但是 MyBatis 社区为了整合 Spring 自己开发了相应的开发包 ,因此在 Spring Boot中,我们可以依赖 MyBatis 社区提供的 starter。

<dependency>
    <groupid>org.mybatis.spring.boot</groupid>
    <artifactid>mybatis-spring-boot-starter</artifactid>
    <version>l.3.1</version>
</dependency>

从包名可以看到, mybatis-spring-boot-starter是由 MyBatis社区开发的。

文章永久链接:https://tech.souyunku.com/47001

未经允许不得转载:搜云库技术团队 » 《深入浅出SpringBoot2.x》读书笔记

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们