1.简介
在平时看源码或者很多配置类上面都会出现@Import注解,功能就是和Spring XML 里面 的 一样. @Import注解是用来导入配置类或者一些需要前置加载的类.
注意:这里的加载是指注入容器内,而不是普通java 被虚拟机加载概念
2. 导入配置的三种类型
@Import支持 三种方式
1.带有@Configuration的配置类(4.2 版本之前只可以导入配置类,4.2版本之后 也可以导入 普通类)
2.ImportSelector 的实现
3.ImportBeanDefinitionRegistrar 的实现
3. 测试例子
3.1 导入普通类
新建一个TestA
public class TestA {
public void fun(String str) {
System.out.println(str);
}
public void printName() {
System.out.println("类名 :" + Thread.currentThread().getStackTrace()[1].getClassName());
}
}
新建一个ImportConfig,在类上面加上@Configuration,加上@Configuration是为了能让Spring 扫描到这个类,并且直接通过@Import引入TestA类:
@Import({TestA.class})
@Configuration
public class ImportConfig {
}
3.测试结果
TestA 是一个普通的类,现在可以被@Autowired注释然后调用,就直接说明已经被Spring 注入并管理了,而普通的类只能通过new 使用
//单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = ApplicationMain.class)
public class ImportAnnotionTest {
//如果TestA不在容器中,那么会报注入错误
@Autowired
TestA testA;
@Test
public void TestA() {
//如果成功打印,则说明TestA 存在一个容器bean
testA.printName();
}
}
结果,说明确实已经被注入容器了:
类名 :com.test.importdemo.TestA