springBoot 注解示意图:
@SpringBootApplication
→@EnableAutoConfiguration
→导入组件类@Import({AutoConfigurationImportSelector.class})
→调用方法 selectImports()
→1.找文件 spring-boot-autoconfigure/MEETA-INF/spring.factories
→2.在文件中查找 EnableAutoConfiguration为key的集合,根据maven依赖导入jar包来筛选配置类
ImportSelector 导入组件
定义一个组件
java
//1.Import 注解导入组件 UserConfig
@Configuration
@Import(People.class)
public class UserConfig{
}
//2. 实现 ImportSleector 重写 slctImports
public class People implements ImportSleector{
@Override
public String[] slctImports(AnnotationMtadata annotationMtadata ){
// 自动注入的server
return new String[]{com.csdn.service.HrmSrviceImpl}
}
}
//3.controller
public class UserController{
//自动注入
@Autowired
private HrmSrviceImpl hrmSrviceImpl;
pulbic String getUserAll(){
hrmSrviceImpl.tstSeervice();
return "index";
}
}
//3.1 HrmSrviceImpl .tstSeervice
public class HrmSrviceImpl{
public void tstSeervice(){
//
}
}
ImportBeanDefinitionRegistrar 导入组件
java
//1. 实现 ImportBeanDefinitionRegistrar
public class UserDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(***){
//***
}
}
// 2. import 注解导入
@Configuration
@Import(UserDefinitionRegistrar .class)
public class People {
}
Condition 导入组件
java
//1.@ Conditional 条件注解 实现 Condition 导入bean 条件判断
public class TestCondition implements Condition{
@Override
public boolean matches(){
if(ctx.geetBeanrFactory().containsBean("user")){
retrun true;
}else{
retrun false;
}
}
}
生命周期
----------正在对容器进行处理----容器后处理器-------------------
------初始化之前执行后处理postProcessBeforeInitialization----
------初始化之后执行后处理postProcessAfterInitialization----
--------调用了有参构造器------
-------BeanNameAware--setBeanName--------
---------setApplicationContext--------
------初始化之前执行后处理postProcessBeforeInitialization---
------InitializingBean---afterPropertiesSet初始化-------
---------init-模拟初始化方法-------
------初始化之后执行后处理postProcessAfterInitialization----
-----------创建spring 容器创建完成--------------
------DisposableBean---destroy销毁时执行的方法-------
---------close模拟销毁spring容器方法-------