- *任何一个项目都有一个启动入口,在springboot中的启动类需要有:
@SpringBootApplication 注解进行描述,并且在指定类中会定义一个main方法,main方法在运行时会读取配置文件,并加载指定资源,然后进行初始化操作.
*FAQ
1)SpringBoot项目中配置文件来源?
a) SpringBoot官方定义(一般为一些基础配置),例如spring.factories。 b) 第三方定义(例如日志系统-log4j.xml..还有很多) c) 我们自己定义(application.properties,...)
2)SpringBoot项目中的资源加载?(资源可以理解为我们的class文件)
a) JDK类文件 b) Spring类文件 c) 自己定义的类文件
3)Spring中的项目资源初始化?
a) 构建实例对象 b) 基于对象存储数据(例如配置信息,默认值)
JVM参数(了解)
跟踪类加载:-XX:+TraceClassLoading
- * FAQ
1) 假如将此类交给spring管理,请问spring何时创建此对象?
a) Spring创建对象的时机,在spring容器启动后创建对象 b) 如果在spring的配置文件中一个bean的配置中有lazy-init="true",那么该bean在调用getBean方法时创建对象。
2) 假如一个对象创建以后,存储到内存,长时间不用会有什么影响?
a) 长时间不使用此被创建出来的对象会占用内存,当一个计算机被占用的运行内存越来越高时JVM运行会越来越来慢。
优化方法:
是在类上添加一个注解@Lazy:此注解用于告诉spring框架,它描述的类的实例,假如暂时用不到,就不会先创建,也叫做懒加载。这个方法一般用于类中含有大对象的类,因为大对象所需占用内存资源过多,在JVM运行如果该对象不需要使用,会增加JVM负担,所以当有大对象的时候可以在类上添加一个@Lazy注释这样它会延迟加载对象,也就是当对象被调用时加载。 @Lazy(true)可以赋值,默认是true可以省略,@Lazy可以使用在方法上或者类上。
3)对象创建以后,应用结束要销毁对象吗?
a) 当对象在整个程序中没有其它引用时,对象需要执行销毁。 b) 当容器销毁时,容器里面的对象会先被销毁(只对单例模式有意义)
4)程序中的每个对象都有生命周期吗?
每个对象都有声明周期,从创建,到(存储)使用,到销毁这就是对象的生命周期。 我们也可以修改对象生命周期方法。 a)@PostConstruct 注解描述的方法会在对象构建以后执行,用于执行一些初始化操作。 b)@PreDestroy 注解描述的方法会在单例对象销毁之前执行,spring容器销毁前会先将容器(Bean池)中的对象进行移除,在移除对象时,假如对象中定义生命周期方法,此时还会调用对象的生命周期销毁方法。 多例对象只会有调用初始化方法,而不会调用销毁方法,因为多例对象在创建后不会存到Bean池中spring可以对其初始化,但不负责销毁,所以不需要销毁方法,同样的@Lazy注解对多例对象也没有作用,因为多例对象只有在需要时才创建。 ** 初学者对SpringBoot的一些见解,如有不对的地方,请大家评论中提出,我也会查阅资料进行修改 **
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。