[java]⼀分钟学会spring注解之@Import注解今天主要从以下⼏⽅⾯来介绍⼀下@Import注解
@Import注解是什么
@Import的三种使⽤⽅式
1,@Import注解是什么
通过导⼊的⽅式实现把实例加⼊springIOC容器中
2,@Import的三种使⽤⽅式
通过查看@Import源码可以发现@Import注解只能注解在类上,以及唯⼀的参数value上可以配置3种类型的值Configuration,
ImportSelector,
ImportBeanDefinitionRegistrar,源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
/**
* {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
* or regular component classes to import.
*/
Class<?>[] value();
}
接下来就分别来看看三种⽅式具体使⽤:
a,基于Configuration也就是直接填对应的class数组
在bean⽬录下新增两个类Square和Circular如下:
/
**
* 定义⼀个圆形
*
* @author zhangqh
* @date 2018年5⽉1⽇
*/
public class Circular {
}
/**
* 定义⼀个正⽅形
*
* @author zhangqh
* @date 2018年5⽉1⽇
*/
public class Square {springframework jar包导入
}
MainConfig注解配置中增加@Import注解如下:
@Import({Square.class,Circular.class})
@Configuration
public class MainConfig
测试打印如下:
AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);
String[] beanNames = BeanDefinitionNames();
for(int i=0;i<beanNames.length;i++){
System.out.println("bean名称为==="+beanNames[i]);
}
运⾏结果:
bean名称为===mainConfig
bean名称为===com.zhang.bean.Square
bean名称为===com.zhang.bean.Circular
对应的import的bean都已经加⼊到spring容器中了
b,基于⾃定义ImportSelector的使⽤
定义⼀个MyImportSelector如下:
/
**
* 定义⼀个我⾃⼰的ImportSelector
*
* @author zhangqh
* @date 2018年5⽉1⽇
*/
public class MyImportSelector implements  ImportSelector{
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.zhang.bean.Triangle"};
}
}
MainConfig注解配置修改如下:
@Import({Square.class,Circular.class,MyImportSelector.class})
测试结果如下:
bean名称为===mainConfig
bean名称为===com.zhang.bean.Square
bean名称为===com.zhang.bean.Circular
bean名称为===com.zhang.bean.Triangle
三⾓形实例同样加⼊到spring容器中了
c,基于ImportBeanDefinitionRegistrar的使⽤
新建⼀个ImportBeanDefinitionRegistrar如下:
/**
* 定义⼀个⾃定的ImportBeanDefinitionRegistrar
*
* @author zhangqh
* @date 2018年5⽉1⽇
*/
public class MyImportBeanDefinitionRegistrar  implements ImportBeanDefinitionRegistrar{
public void registerBeanDefinitions(
AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {
// new⼀个RootBeanDefinition
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Rectangle.class);
/
/ 注册⼀个名字叫rectangle的bean
}
}
修改MainConfig注解配置如下:
@Import({Square.class,Circular.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
运⾏结果如下:
bean名称为===mainConfig
bean名称为===com.zhang.bean.Square
bean名称为===com.zhang.bean.Circular
bean名称为===com.zhang.bean.Triangle
bean名称为===rectangle
rectangle打印出来了说明我们通过ImportBeanDefinitionRegistrar注册的实例也成功加⼊到了spring容器了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。