@Import的使用方法

1、直接填class数组

(1)实体类

public class Cat {
    private int id;
    private String name;
}
public class Dog {
    private  int id;
    private String name;
}

(2)配置类

import com.it.huaxin.vo.Cat;
import com.it.huaxin.vo.Dog;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({Cat.class, Dog.class})
@Configuration
public class PersonConfig {
}

(3)测试类

import com.it.huaxin.config.PersonConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Arrays;

public class PersonTest {
    public static void main(String [] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PersonConfig.class);
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        Arrays.stream(beanDefinitionNames).forEach(obj -> System.out.println(obj));
    }
}

2、ImportSelector方式

(1)实体类

public class Person {
    private int id;
    private String name;
    private int age;
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

(2)实现ImportSelector的类

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

public class PersonImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[] {"com.it.huaxin.vo.Person"};
    }
}

(3)配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({PersonImportSelector.class})
@Configuration
public class PersonConfig {
}

(4)测试类

import com.it.huaxin.config.PersonConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Arrays;

public class PersonTest {
    public static void main(String [] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PersonConfig.class);
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        Arrays.stream(beanDefinitionNames).forEach(obj -> System.out.println(obj));
    }
}

测试结果:

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
personConfig
com.it.huaxin.vo.Person

3、ImportBeanDefinitionRegistrar方式

(1)实体类

public class Person {
    private int id;
    private String name;
    private int age;
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

(2)实现ImportBeanDefinitionRegistrar接口的类

import com.it.huaxin.vo.Person;
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;

public class PersonImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Person.class);
        registry.registerBeanDefinition("person",  rootBeanDefinition);
    }
}

(3)配置类

import com.it.huaxin.registrar.PersonImportBeanDefinitionRegistrar;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({PersonImportBeanDefinitionRegistrar.class})
@Configuration
public class PersonConfig {
}

(4)测试类

import com.it.huaxin.config.PersonConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Arrays;

public class PersonTest {
    public static void main(String [] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PersonConfig.class);
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        Arrays.stream(beanDefinitionNames).forEach(obj -> System.out.println(obj));
    }
}

//运行结果

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
personConfig
person
 


 

猜你喜欢

转载自blog.csdn.net/qingcyb/article/details/114504398