• *任何一个项目都有一个启动入口,在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的一些见解,如有不对的地方,请大家评论中提出,我也会查阅资料进行修改  **

仓悬
19 声望2 粉丝