Spring 基础及组件使用(Conditional,Import,FactoryBean)

@Conditional条件注册bean

1,IOC容器注册bean, 当操作系统为WINDOWS,注册Lison实例; 当操作系统为LINUX, 注册James实例,此时要用得@Conditional注解进行定制化条件选择注册bean;

2,新建Cap7MainConfig1.java,

新建WinCondition.java类做为条件类, 同时必须得实现spring提供的Confition接口

新建 LinuxCondition条件类, 用来处理操作系统为LINUX的bean注册

2,    把IOC容器里的所有person实例名打印出来(为了看效果,刚开始在配置类可以不加@Conditinal)

    @Test

    public void test01()

 

3,    新建test02(), 测试@Conditional  条件加载bean到IOC容器(加上@Conditinal)

当引入@Conditional时, 容器可以选择性的注册bean.

 

@Import注册bean

同样按流程先新建Cap8MainConfig1.java配置类

新建Dog.ava----->public class Dog {}

新建Cat.java---->public class Cat{}

按以下1,2,3箭头步骤分别导入多个类,使用import将dog, cat的bean注册到容器中,并测试打印,看容器中是否已加载此类

分别使用

@Import(Dog.class)   

@Import({Dog.class,Cat.class})

 

ImportSelector可以批量导入组件的全类名数组,自定义逻辑返回需要导入的组件JamesImportSelector.java

@Import({Dog.class,Cat.class,JamesImportSelector.class})

新建JamesImportSelector, 新建Fish  Tiger(与建CatDog一样)

怎么测呢?

 

当然,除了以上,还可以通过ImportBeanDefinitionRegistrar自定义注册,向容器中注册bean;

@Import({Dog.class,Cat.class,JamesImportSelector.class,JamesImportBeanDefinitionRegistrar.class})

新建JamesImportBeanDefinitionRegistrar自定义注册类,实现bean注册

当然除了以上加载方式,还可以通过实现FactoryBean接口方式来加载bean

* 使用spring提供的FactoryBean(工厂bean)

    *   beans.factory.FatoryBean源码跟进去

    *     容器调用getObject()返回对象,把对象放到容器中;

    *     getObjectType()返回对象类型

    *     isSingleton()是否单例进行控制

    *     新建JamesFactoryBean实现FactoryBean

    *     config里新建jamesFactoryBean()方法

    *     写完test03测试用例后:

    *       a,默认获取到的是工厂bean调用getObject创建的对象

    *       b,要获取工厂Bean本身,需要在id前加个  &jamesFactoryBean

    */

把自定义的JamesImportBeanDefinitionRegistrar加入配置类进行测试

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值