组件注册——@Import注解

注入Bean可以通过好几种注解方式:@Controller、@Service、@Repository一般用于自己写的类。@Bean注解一般用于别人写好的代码,我们需要注入时,可以通过该注解注入。

还有一种计较简便的方法,用@Import注解快速导入组件。

看一下@Import注解的源码,value属性是一个Class类型的数组。所以,我们需要注入哪个bean,只需要将其类名.class写入数组中即可。

输出IOC容器中所有的bean:

可以发现,LinuxBook和WindowsBook都已经成功注入到IOC容器中,bean的id默认为类的全类名。


@Import使用ImportSelector

ImportSelector是Spring提供的一个接口,先来看一下源码

很简单,里面就只有一个selectImports抽象方法,该方法返回一个String[]数组,AnnotationMetadata类可以获取当前组件上的所有注解信息。我们只需要写一个Selector实现该接口中的selectImports方法,返回想注入的组件的全类名数组即可。

MyImportSelector类代码如下所示:

配置类如下所示,在类上加上@Import注解,value中将MyImportSelector.class放进去。就可以注入MyImportSelector方法中返回的组件。

运行结果:


@Import使用ImportBeanDefinitionRegistrar

先看一下ImportBeanDefinitionRegistrar的源码,这是一个接口, 里面有一个registerBeanDefinitions()抽象方法,AnnotationMetadata可以获取当前类的所有注解信息,BeanDefinitionRegistry可以获得当前注册bean的定义。我们可以在这个方法中注册bean组件。

自定义一个方法实现ImportBeanDefinitionRegistrar,判断IOC容器中是否有LinuxBook和WindowsBook组件,如果都有的话,向容器中注册Book组件。

配置类如下所示:

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值