把一些零散的知识点都记录到这里

1. spring 资源文件加载方式

spring中资源加载的地址前缀如下:

classpath:表示从类路径加载资源

file:使用UrlResource从文件系统目录中装载资源,可采用绝对或相对路径

http:// :从Web服务器中装载资源

ftp:// : 从FTP服务器中装载资源

其中,classpath:和classpath*:的区别在于classpath*:会扫描所有类路径下出现的资源,而classpath只会在第一个加载的包下查找,即就是只加载一个资源文件。
————————————————
原文链接:https://blog.csdn.net/zhuxinquan61/article/details/53589874

2. js 中把字符串转 Unicode 码的方法

const str = 'ADFGSADASD';
const unicode = str.charCodeAt(1); //第二个字符转Unicode码
const newStr = String.fromCharCode(unicode); //Unicode 转字符串

3. 为什么在 spring 中俩个 bean 互相依赖 却没有报循环依赖的错误?

spring bean 之间的依赖分为两种:

  1. A弱依赖B: 即A 的实例化过程不需要 B 的参与, 一般来说, 如果构造函数为默认, 那么 bean 中的依赖大部分都为弱依赖
  2. A强依赖B: 即A 的实例化过程需要 B 的参与, 在初始化 A 的时候需要使用 B 的实例来执行一些业务逻辑

在不使用依赖注入技术时, 我们通常使用构造函数去传入实例化时需要的依赖对象, 这样久而久之, 类之间的依赖关系就会变得难以管理, 而造成代码维护,运行时风险提高

spring 通过以下几种方式降低了类之间的依赖紧密度:

  1. 使用无参构造函数
  2. 使用 setter getter 或注解分析依赖关系, 并自动注入需要的
  3. 通过bean 的声明周期, 横向分解类实例化的过程, 把实例化与实例化期间执行的逻辑分解到: @PostConstruct 和 InitializingBean 的 afterPropertiesSet()中

通过上述三种方式, 使 bean 的初始化变得无状态化, 而在所有 bean 都实例化之后统一管理后续的生命周期方法, 进而达到依赖调节的目标, 使强依赖弱化为弱依赖

结论: 通过构造函数的依赖传递可能造成无法调解的强依赖, 通过 setter/getter 进行依赖注入可以被调解

上述结论在 @Configuration 注解的类中不适用


@Configuration
public class ConfigurationBean{
  
  // b 是强依赖, spring 为了规避内部其他 bean 在初始化时的空指针风险(initA 中用到了 b), 强制规定配置类的属性为强依赖 
  @Bean
  private B b;
  
  @Bean
  private A initA(){
    //if use b, and b is null
    return new A();
  }
  
}

4. 忽略maven 从父工程继承的spring-boot-maven-plugin插件

因为大部分工程都是服务类工程, 所以我在顶级工程中配置了spring-boot-maven-plugin, 方便子工程使用, 但是有例外的非微服务工程也集成顶级工程

此时需要排除spring-boot-maven-plugin插件, 以免出现错误, exp: 找不到 main-class, 配置如下:

<properties>
    <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
</properties>

具体请看: RepackageMojo.java



相关文章:
⤧  上一篇 如何把JAR发布到maven中央仓库 ⤧  下一篇 ORACLE User与Schema的联系