注: 本人初学(学习自尚硅谷spring注解),可能有一些表述不准确甚至有错误信息,望包涵并留言指正。
1. 包扫描+组件标注注解 (@Controller/@Service/@Repository/@Component等)
2. @Bean[导入第三方包中的组件]
3. 使用@Import注解[快速给容器中导入组件]
- @Imoprt(要导入到容器中的组件),容器中就会自动注册这个组件。id默认是全类名
- ImportSelector: 返回需要导入的组件的全类名数组;
- ImportBeanDefinitionRegistrar:手动注册bean到容器中;
@Import
实现ImportSelector接口
package com.synda.config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
/**
* @author HUZUYOU
* @description 实现ImportSelector接口,返回需要注册的bean ,需要使用全类名
* @date 2020-8-16
*/
public class ImportSelectorCustom implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
String[] arr = new String[]{"com.synda.bean.Color","com.synda.bean.Bluer"};
return arr;
}
}
实现ImportBeanDefinitionRegistrar类
package com.synda.config;
import com.synda.bean.Color;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
/**
* @author HUZUYOU
* @description
* @date 2020-8-16
*/
public class ImportSelectorCustom1 implements ImportBeanDefinitionRegistrar {
/**
*
* @param importingClassMetadata 当前类的注解信息
* @param registry BeanDefinition注册类,把所有需要添加到容器中的bean,调用手动注册进来
*/
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
boolean red = registry.containsBeanDefinition("Red");
boolean bluer = registry.containsBeanDefinition("Bluer");
//如果red和bluer两个bean存在,则创建Color这个bean
if (red && bluer){
//bean定义信息
BeanDefinition beanDefinition = new RootBeanDefinition(Color.class);
registry.registerBeanDefinition("Color", beanDefinition);
}
}
}
通过@Import注解导入这两个类
@Import({ImportSelectorCustom.class,ImportSelectorCustom1.class})