关于springboot:SpringBoot基础入门2Day02笔记

4次阅读

共计 1947 个字符,预计需要花费 5 分钟才能阅读完成。

SpringBoot 根底入门 2_Day02 笔记

XML 的语法规定

  1. 所有 XML 元素都须有敞开标签
  2. XML 标签对大小写敏感
  3. 在 XML 中, 所有元素都必须彼此正确地嵌套。
  4. XML 文档必须要有根元素
  5. XML 的属性值须加引号
  6. 空格会保留, 不想 html 会删除

JVM 参数 – 跟踪类加载

run Configerations–>>Arguments –>>VM arguments
输出:-XX:+TraceClassLoading
下面的框对应的就是 main 办法里穿的 String 数组 args

  • main 办法里的 args 是 JVM 调用传入的, 和 Spring 无关

敞开 Spring Banner 画面

con
spring.main.banner-mode=off

CommandLiner 接口

CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行
适宜初始化,
执行程序总结
1. 先加载 Component >> 2. 再执行接口里的 run 办法 >> 最初再执行 main 办法或者是 Test 办法

@Autowired 注解

主动为该属性注入一个值
前提是该属性所属的类是归于 spring 框架来治理,@Component/@Service
/@Controller/ 等等
(打印该属性, 调用该属性所属类的 toString 办法)

我的项目启动过程

找到我的项目的入口类(应用了 @SpringBootApplication 注解形容),而后运行启动类,检测启动过程,SpringBoot 在启动时,控制台会呈现 Spring 标识

我的项目启动时产生了什么呢?

  1. 首先基于启动入口类上的注解形容,进行主动配置并扫描指定包以及子包中的类进行加载,
  2. 而后检测类上是否有 Spring 框架中指定的注解形容(例如 @Component,@Controller,@Service 等)。
  3. 如果有,则将类交给 Spring 框架中的 BeanFactory 工厂接口的实现类对象,此工厂对象会基于反射创立 Bean 的实例,假如此 Bean 指定了生命周期办法,还会调用生命周期办法。
  4. 当实例创立当前,Spring 框架还会基于类的作用域形容,将实例存储到不同作用域的容器中。以实现 Bean 对象的迷信利用。

业务初步实现及测试

常见异样 1:NoSuchBeanDefinitionException

为什么会有这个异样? 先理解一下 BeanDefination 是什么

  1. Xxx.class 是在 disk 中的
  2. 而后被一个 Thread 利用 I / O 技术, 读入到 JVM 内存中
  3. 存在 BeanDefinition 中, 存储的就是这个类的配置信息, 包, 注解等等等等
  4. 有很多 BeanDefinition 啊? 对的, 所以是存储在一个 Map 中,Map<String,BeanDefinition>, 如果没有给 @Component(“”)指定形容, 那么 String 默认为这个 bean 对应的类名, 首字母小写
  5. 由 BeanFactory 来创立实例(Bean Instance), 存储 bean 的实例信息, 也是存在一个 Map 中,Map<String,Object>,string 的和下面的 string 一样

而 NoSuchBeanDefinitionException, 这个异样就是没有找到类的配置信息, 也就相当于我要一个什么货色, 然而连原材料都没有

这个异样很常见, 其实没有 bean 的相干的配置, 解决办法:
1. 查看注解是不是丢了

常见异样 2:No tests found with test runner ‘JUNIT5’

解决方案:
1, 查看测试方法是不是 private, 要求不能用 private
2, 查看单元测试办法是不是 void, 要求没有返回值
3. 查看是不是传了参数, 要求不能穿参数

常见异样 3:unable to find SpringBootConfiguration

解决方案:
1. 查看这个测试类是否在启动类的同一个包或子包中, 因为 SpringBootApplication 还包含 SpringBootConfiguration

类与类之间的关系

有三种关系

  • is a (实现 / 继承)
  • has a (有一个属性)
  • use a (调用了一个办法)

Eclipse 关上查找类窗口快捷键
ctrl+shift+T

单例模式, 判断两个对象是否是同一个对象?

// 因为 hashcode 办法可能算出一样的值, 所以如果打印进去值一样, 不靠谱 System.out.println(p1);
System.out.println(p2);
// 采纳上面这种形式比拟才是真正的比拟对象内存地址
System.out.println(p1==p2);

多例模式

Scope(“prototype”)
多例对象 spring 负责创立, 不负责销毁
spring 启动文件会创立单例对象, 然而不会创立多例对象

正文完
 0