SpringBoot学习总结01

SpringBoot的启动过程

1)基于配置的加载类把类加载,底层通过IO把类从磁盘中加载到缓存之中
2)寻找spring中定义用来描述bean的注解,在底层创建一个map,bean的name作为key,类的字节码Xxx.Class使用反射来来获取的配置信息作为value,传入map中Map
3)将map传入BeanFactory,由BeanFactory来创建对象,再次使用map进行保存。map
4)使用的时候通过getBean()方法就可得到所需要的对象,但是要注意,因为value是使用Object类型进行保存的所以在使用的时候要记得强转成我们所需要的类型。

SpringBoot的启动类

@SpringBootApplication
这个注解所注释的类为SpringBoot的启动类。
@SpringBootApplication
public class Application{
public static void main(String[] args){
SpeingApplication.run(Application.class, args);
}

}

Spring中的一些注解使用

package com.cy.pj.common.pool;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
//构建对象池类型
@Component
@Lazy
@Scope("protrotype")//多例,不写默认为单例模式(singleton)
public class ObjectPool {//bean的名字默认为首字母小写
 public ObjectPool(){
        System.out.println("ObjectPool()");
    }
    @PostConstruct//生命周期初始化方法,构造方法执行后执行
 public void init(){
        System.out.println("init()");
    }
    @PreDestroy//生命周期销毁方法,spring容器移除前执行
 public void destory(){
        System.out.println("destory()");
    }
}`

@Component

中引用了如下的几个注释
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
此注解是描述spring管理的一般注解,也就说被这个注释修饰的类,将创建对象交给spring去管理实行。

@Lazy

延迟加载
@Lazy(on)表示开启延迟加载,off则代表关闭延迟加载
但一般情况下不适用延迟加载,就不需要些此注释所以off一般不做使用
延迟加载,不会在一启动程序的时候就在调用无参构造创建类的实例,耳屎在需要时候在创建类的实例并使用。
我们可以用两种方法观察到这种变化。
1)在延迟加载的类的无参构造中sout一段语句,观察在何时调用了类的无参构造,创建了类的实例
2)采用JVM参数自取观察,JVM参数代码:-XX:+TraceClassLoading

@Scope

该注解用于指定类的实际作用域。
在不用@Score注解时,默认是单例模式即(singleton)
单例:在程序启动后spring就会创建类的实例放置到BeanPool中,方便调用。实例独一无二,不会第二次创建,使用过后会重新放入Pool中。视情况而定回配合@Lazy使用,当我们创建的单例过大,而且一开始并不会使用刀片该实例,不希望在程序一开始就加载进来占用内存,但是之后又会经常使用,不希望多次创建浪费时间,就可以使用@Scope(singleton)和@Lazy这两个注解结合。
多例:@Scope("protrotype"),本身就具有懒加载的一定特性,在程序运行的时候不会加载类的实例到BeanPool中,但是用注意,多例模式,每一次的调用都会创建一个新的实例,(连续调用两次 实例会防线地址值各不相同)而且这个实例是不会放入Pool中的,在使用完之后便会被垃圾回收机制回收(而单例的实例只有在Pool被销毁的时候才会消失)。如果实例使用的很少,不希望其放在Pool中一直占用内存。我们便可选择多例模式。

你可能感兴趣的:(SpringBoot学习总结01)