三、Spring注解之@Import
spring注解之@Import
【1】@Import
? 参数value接收一个Class数组,将你传入的类以全类名作为id加入IOC容器中
? 比较简单,此处不做详细解释
【2】ImportSelector
? ImportSelector强调的是复用性,使用它需要创建一个类实现ImportSelector接口,实现方法的返回值是字符串数组,也就是需要注入容器中的组件的全类名。id同样也是全类名。
? 上代码:
//自定义逻辑返回需要导入的组件 public class MyImportSelector implements ImportSelector { // 返回值就是导入到容器中的组件全类名 // AnnotationMetadata:当前标注@Import注解的类的所有注解信息 public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" }; } }
【3】ImportBeanDefinitionRegistrar
? spring官方就是用这种方式,实现了@Component、@Service等注解的动态注入机制。定义一个ImportBeanDefinitionRegistrar的实现类,然后在有@Configuration注解的配置类上使用@Import导入
? 具体使用:创建一个ImportBeanDefinitionRegistrar的实现类,实现registerBeanDefinitions方法,对组件进行注入。
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { /** * @param annotationMetadata 当前标注@Import注解的类的所有注解信息 * @param beanDefinitionRegistry BeanDefinition的注册类 */ public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class); beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition); } }
? 配置类MyConfig:
@Configuration @Import(value = {MyBeanDefinitionRegistrar.class}) public class MyConfig { } /**测试结果 beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor beanName: org.springframework.context.event.internalEventListenerProcessor beanName: org.springframework.context.event.internalEventListenerFactory beanName: myConfig beanName: cat */
相关推荐
meleto 2020-08-15
也许不会看见 2020-06-28
横云断岭 2020-06-11
smalllove 2020-06-09
吾日五省我身 2020-06-08
Dullonjiang 2020-06-02
smalllove 2020-05-09
melonjj 2020-04-19
smalllove 2020-03-27
meleto 2020-03-08
whbing 2020-02-29
itjavashuai 2020-02-14
小鱿鱼 2020-02-11
横云断岭 2020-01-29
也许不会看见 2020-01-25
whbing 2019-12-08
lovejk 2019-11-16
Julywhj 2019-11-10