一.项目启动过程分析:spring
SpringBoot项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,而后检测类上是否有Spring框架中指定的注解描述,有的话,则将类交给Spring框架中的BeanFactroy工厂接口的实现类对象,此工厂对象会基于反射建立Bean的实例,假如指定了生命周期方法,还会调用生命周期方法,当实例建立了之后,Spring框架还会基于类的做用域描述,将实例存储到不一样做用域的容器中.
二.Spring框架中的注解:框架
@SpringBootApplication注解描述的类为项目的启动入口 @Component是Spring中用于描述Bean类的一个注解。 @SpringBootTest 注解用于告诉spring框架,此测试类交给spring管理。 @Autowired注解描述属性时,用于告诉spring框架要为此属性注入一个值. @Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,一般会配合单例做用域使用,
默认是true。测试
@Scope 是Spring中用于定义Bean对象做用域的一个注解,其经常使用的值有
singleton(整个内存有一份Bean实例,此实例什么时候建立与类的延迟加载特性配置有关,此实例建立之后,生命周期会由spring框架管理),prototype(每次获取都会建立新实例,此实例会在须要时建立与lazy特性无关,这个实例建立之后,不会交给spring管理,spring能够对其初始化,但不负责销毁。)等。prototype
@PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法以后执行(是对象建立之后的初始化)。 @PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁以前执行(看成用域为prototype时,此方法不会执行)。
三.Spring框架管理Bean对象的优点:code
Spring框架能够为由它管理的对象(Bean)提供懒加载策略(@Lazy),做用域(@Scope),生命周期方法(@PostConstruct,@PreDestroy),以实现对象对系统的有效使用,同时,Spring框架还能够基于对象和对象之间的依赖关系,下降对象和对象之间的耦合性,提升程序的可维护性和可扩展性.