java的 import注解_[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 {

}

MainConfig注解配置中增加@Import注解如下:

@Import({Square.class,Circular.class})

@Configuration

public class MainConfig

测试打印如下:

AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);

String[] beanNames = applicationContext2.getBeanDefinitionNames();

for(int i=0;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

registry.registerBeanDefinition("rectangle", rootBeanDefinition);

}

}

修改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容器了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值