1

一.SpringBoot项目启动过程分析

首先我们看一下项目启动时发生了什么呢,请看下图:
image

SpringBoot项目在启动时,首先基于启动入口类的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service等)假如有则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法。当实例创建以后,Spring框架还会基于类作用域描述,将实例存储到不同到作用域容器中,以实现Bean对象的科学应用。  

二.SpringBoot单元测试报错类型分析

image
1.可能是单元测试方法被private修饰了
2.可能是返回值类型错了,应该是void 无返回值类型
3.可能是方法里有参数了,应该是无参数的。
image

注解是用来描述对象的,写代码切记不要从注解开始。~~~~编码习惯要养好

注解

@Lazy (延迟加载)!!只针对于@Scope("singleton")单例对象。
(@Lazy(true)
@Lazy(value=true)
)(适合应用场景:大对象,稀少用)可以修饰类,用于告诉spring框架,它描述的类的对象实例,假如暂时用不到就不要先去创建。
@Scope("singleton")默认就是单例作用域,这个类的实例在一个spring容器中默认只有一份(!!使用场景对象频繁用的时候,前提是线程安全的啊)
@Scope("prototype")//每次从spring容器中获取对象都会创建一个新的实例(使用场景对象应用次数比较少的时候),被prototype修饰的作用域的对象不会存储到Spring的Bean池里边。比如对象作用域是prototype,就不要写被@ProDestroy注解修饰的close方法。
image
image

JVM参数

最小堆:-Xms5m
最大堆:-Xmx5m

hashCode值

image
1.同一个对象的hashcode值一定相同
2.但是不同对象的hashcode值有可能相同
image
3.hashcode值相同不一定是一个对象
4.引用指向同一个对象
image

为什么要把Bean对象交给Spring框架管理呢?

首先Spring为Bean赋予了延迟加载、作用域、生命周期方法这些特性,基于这些特性可以更加科学的使用我们的对象。同时Spring框架还可以基于用户设计管理对象与对象的依赖关系,以降低对象与对象之间的直接耦合,提高程序的可维护性和可扩展性。


随风
13 声望1 粉丝

任重而道远