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

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

5. servlet3.0 注解声明 servlet 不生效的问题

应该是 web.xml 的版本太低了, 导致应用的 servlet 标准低, 换成下方版本可解决

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	      version="3.0">

  <display-name>Servlet 3.0 Web Application</display-name>


</web-app>


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