SpringBoot常见问题私人理解

1、所有的业务代码都放在src/main/java所在的包或者子包里,所有测试类都放在src/test/java包里
2、SpringBoot项目启动的入口只有一个,并且需要使用@SpringBootApplication注解进行描述
启动时:
1):加载类,将类的信息从磁盘读到内存,利用线程加IO的方式实现
2):创建字节码对象(类型为Class类型)用于存储类的字节码信息
3):基于字节码对象获取类上的注解信息,判定此类是否要交给spring管理
4):如果是需要交给spring管理的对象,spring框架会创建其对象然后赋予其特性
5):基于配置文件以及springboot提供的自动配置对对象进行初始化的应用
3、延迟加载、作用域
a):延迟加载:按需加载也称为懒加载,有暂缓对象的创建这个特性,即何时需要何时创建。
实现:在需要延迟(懒加载)的对象类型上使用@Lazy注释进行描述
优点:可以优化资源的使用
缺点:用的时候才创建可以会导致响应速度降低
使用场景:资源有限,大对象并且用的少时,能不创建就不创建对象。
b):作用域:为对象提供的作用范围,对象的生命周期只能在指定范围内有效
优点:让对象在有效范围内发挥作用,尽量控制对象的创建和销毁以保证实现对象的高效和低耗的运行
缺点:框架底层设计难度大,应用不熟练会导致作用域冲突
场景:不同业务作用域的设计不同
实现:
a):@Scope(“singleton”)单例作用域,此作用域的对象在这个内存中只有一份,通过共享设计(池)
实现对象的可重用性;单例作用域内的对象对于何时创建(由懒加载特性)设计决定。
是否可以被销毁由spring框架决定,一般是在容器销毁时被销毁,适用应用频率较高的对象
b):@Scope(“prototype”)多例作用域,此作用域的对象在需要时创建(与懒加载特性无关),
每次从容器获取都是一个新的对象,且spring框架不负责销毁。适合应用频率较低的对象。
生命周期方法:
@PostConstruct:此注解描述生命周期初始化方法,在构造方法执行之后执行,用于实现一些资源的初始化操作
@PreDestroy:此注解描述生命周期的销毁方式,在对象销毁之前执行
4、当GC系统没有启动时,对象可能会被回收,JAVA中大多数对象都会存储在堆中,但对于一些没有逃逸的小对象也可能会分配在栈上:逃逸与为逃逸的代码区别如下:
static void doMethod01(){
byte[]b1=new byte[1]
}//小对象,未逃逸,分配在栈上,方法调用结束,对象销毁
static byte[]b2;
static void doMethod02(){
b2=new byte[2];
}//小对象,但逃逸了(方法外有引用指向此对象),对象分配在堆上
注:JDK8中默认会打开逃逸分析选项,希望未逃逸的小对象分配在栈上,这样可以避免启动GC对对象进行回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值