我的项目启动过程

我的项目在启动时,首先基于启动入口类上的注解形容,进行主动配置并扫描指定包以及子包中的类进行加载,而后检测类上是否有Spring框架中指定的注解形容(例如@Component,@Controller,@Service等)。如果有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创立Bean的实例,假如此Bean指定了生命周期办法,还会调用生命周期办法。当实例创立当前,Spring框架还会基于类的作用域形容,将实例存储到不同作用域的容器中。以实现Bean对象的迷信利用。

注解@Component

@Component是Spring中用于形容Bean类的一个注解。用于通知Spring这个类的实例由Spring创立,当此对象由Spring创立和治理时,默认会将对象存储到池(Bean池)中。

注解@SpringBootTest

@SpringBootTest 注解用于通知spring框架,此测试类交给spring治理。

注解Autowired

@Autowired注解形容属性时,用于通知spring框架要为此属性注入一个值,@Autowired由spring框架定义,用于形容类中属性或相干办法(例如构造方法)。Spring框架在我的项目运行时如果发现由他治理的Bean对象中有应用@Autowired注解形容的属性或办法,能够依照指定规定为属性赋值(DI)。其根本规定是:首先要检测容器中是否有与属性或办法参数类型相匹配的对象,如果有并且只有一个则间接注入。其次,如果检测到有多个,还会依照@Autowired形容的属性或办法参数名查找是否有名字匹配的对象,有则间接注入,没有则抛出异样。最初,如果咱们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还能够应用@Qualifier注解对其属性或参数进行形容(此注解必须配合@Autowired注解应用)。

代码设计以及运行剖析

注解@Lazy

@Lazy注解用于形容类,其目标是通知spring框架此类反对提早加载,通常会配合单例作用域应用。

注解Scope

** @Scope 是Spring中用于定义Bean对象作用域的一个注解,其罕用的值有:
*singleton(整个内存有一份Bean实例,此实例何时创立与类的提早加载个性配置无关,此实例创立当前,生命周期会由spring框架治理)
*prototype(每次获取都会创立新实例,此实例会在须要时创立与lazy个性无关,这个实例创立当前,不会交给spring治理,spring能够对其初始化,但不负责销毁。)等。
**

注解PostConstruct

注解用于形容bean对象生命周期办法中的初始化办法,此办法会在对象的构造方法之后执行(是对象创立当前的初始化)。

注解PreDestory

@PreDestroy 注解用于形容Bean对象生命周期办法中的销毁办法,此办法会在对象销毁之前执行(当作用域为prototype时,此办法不会执行)。