Spring的深入浅出--5.注册组件实现自定义规则注入bean

给容器中注册组件:

1)、包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)

2)、@Bean[导入的第三方包里面的组件]

例如:

3)、@Import [快速的给容器中导入一个组件]

创建Color类

 添加@Import(),直接将Color类(也就是相当于不需要在类的上面加上任何注解)注入进来

运行:

注意:导入组件,id默认是组件的全类名

创建Red

再加入到Red.class

运行:

使用注解ImportSelector

 查看ImportSelector源码:返回需要导入的组件的全类名数组

创建MyImportSelector实现ImportSelector接口:

 在MainConfig2中的@Import中添加我们自定义的组件

如果我们返回的是一个null的话,会报空指针异常。

创建一个Blue类

创建一个Yellow类

可以得到注解的所有信息

这里我们就不使用上面的动态获取,直接修改返回String类的值为类路径,所有这里我们就可以自定义自己的规则,然后进行判断,返回自己想要注入的bean。

我们可以看到它出现了两个我们在String中添加的bean类

 在@Import中不仅可以写ImportSelector而且还可以写ImportBeanDefinitionRegistrar

查看ImportBeanDefinitionRegistrar的源码

创建MyImportBeanDefinitionRegistrar类实现ImportBeanDefinitionRegistrar

现在我们在MainConfig2的@Import注解中添加:MyImportBeanDefinitionRegistrar.class

创建RainBow类

 注册“rainBow”

 由于容器中并不存在单独的“red”和“blue”

修改

 可以看到产生了RowBow类

使用Spring提供的FacotryBean

添加一个打印信息在得到对象的时候

对于单例模式返回true

创建ColorFactoryBean()方法

修改主函数:

运行:

判断它是否是单例的

加入前缀&

得到工厂对象

为什么会是这样呢?查看BeanFactory源码

总结FactoryBean:

1)默认获取到的是工厂bean调用getObject创建的对象

2)要获取工厂Bean本身,我们需要在id前面加一个&

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值