注入示意图(IOC)
1、配置注入
配置的注入:要么注入,要么忽略,要么异常。这个过程是同步的。
@Component
public class DemoCom{
@Inject("${user.name}") //注入配置
String userName;
}
2、Bean 注入
因为扫描的顺序关系是不可预期的,在做 Bean 字段的注入处理时,目标可能“已”存在、也可能“未”存在。当未存在时,框架会进行订阅处理,“等到”目标 Bean 注册时会进行通知回调并注入。所以,这个过程可能是同步的,也可能是异步的(也可能就没有)。
@Component
public class DemoCom{
@Inject("${user.name}")
String userName;
@Inject
UserService userService; //注入Bean
}
图中的 Bean2 有2个特点,需要注意:
- 有可能永远不会产生(比如用户没写)
- 在注册时,有些字段也可能在订阅中(注册,不会等待所有字段注入完成)
3、Bean 生命周期回顾
@Component
public class DemoCom implements LifecycleBean{
@Inject("${user.name}")
String userName;
@Inject
UserService userService; //注入Bean
public DemoCom(){
//构建函数时,注入是不能用的
}
@Override
public void start(){
//所有 bean 都构建完成了(包括所有注入)//可以做些像数据初始化之类的活
}
@Override
public void stop(){
//一般做些释放或停止类的工作
}
}