SpringBoot根底入门2_Day02笔记
XML的语法规定
- 所有XML 元素都须有敞开标签
- XML 标签对大小写敏感
- 在XML 中,所有元素都必须彼此正确地嵌套。
- XML 文档必须要有根元素
- XML 的属性值须加引号
- 空格会保留,不想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标识
我的项目启动时产生了什么呢?
- 首先基于启动入口类上的注解形容,进行主动配置并扫描指定包以及子包中的类进行加载,
- 而后检测类上是否有Spring框架中指定的注解形容(例如@Component,@Controller,@Service等)。
- 如果有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创立Bean的实例,假如此Bean指定了生命周期办法,还会调用生命周期办法。
- 当实例创立当前,Spring框架还会基于类的作用域形容,将实例存储到不同作用域的容器中。以实现Bean对象的迷信利用。
业务初步实现及测试
常见异样1:NoSuchBeanDefinitionException
为什么会有这个异样?先理解一下BeanDefination是什么
- Xxx.class是在disk中的
- 而后被一个Thread利用I/O技术,读入到JVM内存中
- 存在BeanDefinition中,存储的就是这个类的配置信息,包,注解等等等等
- 有很多BeanDefinition啊?对的,所以是存储在一个Map中,Map<String,BeanDefinition>,如果没有给@Component("")指定形容,那么String默认为这个bean对应的类名,首字母小写
- 由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启动文件会创立单例对象,然而不会创立多例对象