废话不多说,直接进入正题。今天来谈一下@Import注解
首先看一下目录结构
主要看一下配置类和测试类
MainConfiguration.java
package com.sht.configuration;
import com.sht.entity.Green;
import com.sht.entity.MyImportBeanDefinitionRegistrar;
import com.sht.entity.MyImportSelector;
import com.sht.entity.Student;
import org.springframework.context.annotation.*;
@Configuration(value = "myConfiguration")
@Import({Green.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class MainConfiguration {
@Bean
public Student student(){
return new Student();
}
}
MainTest.java
package com.sht.test;
import com.sht.configuration.MainConfiguration;
import com.sht.entity.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* 测试类
*/
public class MainTest {
@Test
public void test1(){
//创建spring容器(基于注解方式创建),参数为配置类
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class);
String[] beanDefinitionNames = context.getBeanDefinitionNames();
for (String beanName : beanDefinitionNames){
System.out.println(beanName);
}
}
}
MyImportSelector.java
package com.sht.entity;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
String[] strs = new String[2];
strs[0] = "com.sht.entity.Red";
strs[1] = "com.sht.entity.Blue";
return strs;
}
}
MyImportBeanDefinitionRegistrar.java
package com.sht.entity;
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 MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(RainBow.class);
registry.registerBeanDefinition("rainBow",rootBeanDefinition);
}
}
先看一下运行结果
Student...constructor...
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
myConfiguration
com.sht.entity.Green
com.sht.entity.Red
com.sht.entity.Blue
student
rainBow