我的项目启动过程
我的项目在启动时,首先基于启动入口类上的注解形容,进行主动配置并扫描指定包以及子包中的类进行加载,而后检测类上是否有 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 时,此办法不会执行)。