spring import

@Import标签使用

  1. 一般基本的用import标签使用
    1
    @Import(value = {Dog.class})

2.实现import接口

Cat

1
2
3
package com.melon.app.bean;
public class Cat {
}

Dog

1
2
3
package com.melon.app.bean;
public class Dog {
}

MelonImportSelector实现spring提供的接口
package com.melon.app.config;

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

public class MelonImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{“com.melon.app.bean.Cat”,”com.melon.app.bean.Dog”};
}
}

MyImportConfigureation 配置类

1
2
3
4
@Configuration
@Import(value = {MelonImportSelector.class})
public class MyImportConfigureation {
}

测试扫描出来的bean结果如下

1
2
3
4
5
6
7
8
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
myImportConfigureation
com.melon.app.bean.Cat
com.melon.app.bean.Dog

  1. importBeanDefintionRegister
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class MelonImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
    *
    * @param importingClassMetadata 当前类的注解信息
    * @param registry beanDefinition注册类
    * 把所有需要添加到容器中的bean加入。
    */
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    boolean bean1 = registry.containsBeanDefinition("com.melon.app.bean.Dog");
    boolean bean2= registry.containsBeanDefinition("com.melon.app.bean.Cat");
    //如果Dog和Cat同时存在于我们IOC容器中,那么创建Pig类,加入到容器
    //对于我们要注册的bean,给bean进行封装,
    if(bean1 && bean2) {
    RootBeanDefinition beanDefinition = new RootBeanDefinition(Pig.class);
    registry.registerBeanDefinition("pig",beanDefinition);
    }
    }
    }
1
2
3
4
@Configuration
@Import(value = {MelonImportSelector.class,MelonImportBeanDefinitionRegistrar.class})
public class MyImportConfigureation {
}

扫描注册bean结果

1
2
3
4
5
6
7
8
9
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
myImportConfigureation
com.melon.app.bean.Cat
com.melon.app.bean.Dog
pig