@Import的使用
作用:
1)@Import:源码的注释中已经表明,它的功能等于@bean,
2)前两种方式加入容器时,bean id为全限定类名,第三种方式可以自定义id
第三种方式的优点在于可以自定义创建bean的过程。
1.直接引入对应类的Class对象,
//MyImportSelector,MyImportBeanDefinitionRegistrar分别实现了两个接口
@Import({TestA.class,TestB.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class SpringConfig {}public class TestA {public TestA() {
System.out.println("执行testA的无参构造方法");
}public void funTestA() {
System.out.println("执行testA中的funTestA方法");
}}
public class TestB {public TestB() {
System.out.println("执行TestB的无参构造方法");
}public void funTestB() {
System.out.println("执行TestB中的funTestB方法");
}}
2.实现ImportSelector接口
1)可以返回空数组,但是不能返回null,否则会报空指针异常
/**
* 实现ImportSelector,重写方法selectImports,返回需要引入的类,并创建实例,加入spring容器
*/
public class MyImportSelector implements ImportSelector {public MyImportSelector() {
System.out.println("MyImportSelector构造方法");
}@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.lagou.edu.testimport.TestC"};
}}
3.实现ImportBeanDefinitionRegistrar接口
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {public MyImportBeanDefinitionRegistrar() {
System.out.println("执行MyImportBeanDefinitionRegistrar的构造方法");
}@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//指定要注册的bean信息
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestD.class);
//注册bean,并指定bean的id
registry.registerBeanDefinition("testD", rootBeanDefinition);
}
}
【@Import的使用】测试案例
@Test
public void test3() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
TestA testA =(TestA) ac.getBean("com.lagou.edu.testimport.TestA");
testA.funTestA();
TestB testB =(TestB) ac.getBean("com.lagou.edu.testimport.TestB");
testB.funTestB();
TestC testC =(TestC) ac.getBean("com.lagou.edu.testimport.TestC");
testC.funTestC();
//注册bean时指定了bean的id,
TestD testD =(TestD) ac.getBean("testD");
testD.funTestD();
}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量