导语:众所周知,在java开发领域Spring框架是始终绕不过的一座大山, 为什么这样说, 因为Spring框架就是java领域的六边形战士, 究其根本原因主要是 Spring 框架针对不同场景可以提供一站式解决方案, 给复杂的开发工作提供了多个层面的技术支持。对于开发者来说 怎么掌握Spring框架且在日常工作中熟练使用, 还是有一定复杂度的, 那我就带大家简单了解下Bean创建的生命周期。
Bean创建的生命周期大致可分为以下几步
-
推断构造方法
-
实例化
-
填充属性
-
处理回调
-
初始化前 处理@PostContruct注解
-
初始化 处理InitializingBean接口
-
初始化后 进行AOP
看完这张图, 就会有聪明的小迷瞪蛋儿问了 "为啥我还是没搞懂Bean实例化和Bean初始化的区别!",那我来告诉你
Spring 在创建一个Bean对象时, 会先创建出来一个Java对象, 然后会通过反射来执行类的构造方法, 从而得到一个Java对象, 这个过程就是Bean的实例化。
在得到Java对象后,会进行依赖注入,依赖注入之后就会进行初始化, 而Bean的初始化就是调用前面创建出来的Java对象中特定的方法, 比如Java对象实现了InitializingBean接口,那么初始化的时候会执行Java对象的afterPropertiesSet()方法, Spring只会执行这个方法,并不会关心这个方法做了什么, 我们可以在这个方法中去对某个属性进行验证或者直接给某个属性赋值都是可以的, 反正Bean的初始化就是执行afterPropertiesSet()方法或者执行init-method指定的方法
@Component
public class UserService{
public class test(){
System.out.pringln("我是你哥哥");
}
}
@CompanentScan("com.test")
public class Application{
@Bean(initMethod = "test")
public UserServic getUserService(){
return new UserService();
}
}
咋样,看到这里明白了吗?仔细想想,其实没有那么🚹