注解

@Configuration

注解配置类,类本身也会被容器管理,可以和@Bean注册bean。

@Import:

用来加载一些配置类或者需要前置加载的类,导入的类会被spring容器管理。
@Import可以是一个class或ImportBeanDefinitionRegistrar实现类或ImportSelector实现类。

@EnableAutoConfiguration

spring-boot完成自动装配的核心注解,借助@Import(EnableAutoConfigurationImportSelector.class),通过EnableAutoConfigurationImportSelector帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
EnableAutoConfigurationImportSelector借助SpringFactoriesLoader,是一个工具类,专门获取引用jar包里面的spring.factories文件,进而加载自动装配类
参考:org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations

@Bean

对应处理类: ConfigurationCalssPostProcessor

@Autowired、@Value

对应处理类: AutowiredAnnotationBeanPostProcessor

@PostConstruct、@PreDestroy

对应处理类: CommonAnnotationBeanPostProcessor


接口

BeanFactoryAware接口

实现该接口,便可以通过beanfactory访问容器,实现该接口的方法void setBeanFactory(BeanFactory beanFactory)即可。

ImportBeanDefinitionRegistrar接口

实现该接口,可以通过registerBeanDefinitions()方法,我们可以动态的向Spring容器中注册bean实例
(一般ImportBeanDefinitionRegistrar需要配合@Import注解)。

FactoryBean

生成bean的一种方式,普通的bean会实例化当前类,而如果实现该接口,通常是用来创建比较复杂的bean,通过getObject进行获取。

BeanDefinitionRegistryPostProcessor

实现BeanDefinitionRegistryPostProcessor接口,需要实现postProcessBeanDefinitionRegistry和postProcessBeanFactory方法,postProcessBeanDefinitionRegistry先执行。
主要用于在beanDefinition实例创建之前,通过BeanDefinitionRegistry参数进行一些前置的操作,给容器增加一些额外的组件,甚至修改bean的beanClass以此修改bean的实现类。
注意,需要增加@Component或被@Import等,加入bean的创建中才会触发机制。

BeanPostProcessor

通过实现该接口,可以在 Spring 容器实例化 Bean 之后对其进行修改和自定义。通过该接口提供的 postProcessBeforeInitialization 和 postProcessAfterInitialization 方法,我们可以在 Bean 初始化之前或之后进行一些自定义操作。抽象有2个参数Object bean, String beanName。

ClassPathBeanDefinitionScanner

ClassPathBeanDefinitionScanner是Spring框架中的一个类,主要用于扫描指定包路径下的Java类并将其转换为Spring的Bean定义。它实现了BeanDefinitionScanner接口,并提供了一些自定义的配置选项。

在使用ClassPathBeanDefinitionScanner时,您需要提供要扫描的包路径,然后可以根据需要配置其他选项。例如,您可以指定要扫描的注解类型、要排除的类、是否包含接口类型等等。ClassPathBeanDefinitionScanner会根据这些选项扫描类文件,并生成Spring的BeanDefinition对象,以便容器能够对这些类进行实例化和管理。
例如Mybatis中,ClassPathMapperScanner继承了ClassPathBeanDefinitionScanner,来扫描mapper完成代理bean的实例化。

ObjectProvider

ObjectProvider 是 Spring 框架提供的一个接口,它允许在运行时延迟地获取某个 bean 实例;例如可以通过 getIfAvailable() 方法获取 Interceptor 数组实例,如果该实例不存在则返回 null,这可以避免在出现异常时引起应用崩溃。在 MyBatis-Plus 中,ObjectProvider<Interceptor[]> 接口用来获取 Interceptor 数组。