Spring IoC获取对象的方式

在Spring IoC容器中获取Bean可以通过以下几种方式:

1、context.getBean(Class<T> requiredType):根据类型获取Bean。其中:

  • requiredType为要获取bean的类型
  • 如果容器中有多个实现该类型的Bean,但是没有配置优先使用哪个Bean,则会抛出NoUniqueBeanDefinitionException异常

2、context.getBean(String name):根据名称获取Bean。其中:

  • name为Bean在Spring IoC容器中的名称
  • 默认情况下,Bean的名称是类名进行了首字母小写的处理后的结果
  • 可以通过在Spring注解中设置名称来设置Bean的名称,如:@Component("myBean")

3、context.getBean(String name, Class<T> requiredType):根据Bean名称和类型获取Bean。

  • 该方法相当于在getBean(String name)方法的基础上添加了Bean类型的验证
  • 如果获取的Bean对象与requiredType指定的类型不同,将抛出BeanNotOfRequiredTypeException

4、context.getBeansOfType(Class<T> type):根据类型获取容器中所有实现该类型的Bean。

  • type为要获取bean的类型
  • 该方法返回Map类型,其中key为Bean在容器中的名称,value为Bean实例

【案例】IoC获取对象示例

在Application类中,测试IoC获取对象的方式:

 
  1. public class Application {
  2. public static void main(String[] args) {
  3. ApplicationContext context =
  4. new AnnotationConfigApplicationContext(BeanDefineConfig.class);
  5. // IoC容器中存在多个相同类型的Bean时,
  6. // 使用.class获取会抛出异常:NoUniqueBeanDefinitionException
  7. // ArrayList<String> names = (ArrayList<String>) context.getBean(ArrayList.class);
  8. // 使用name+type的方式,不需要再进行强制类型转换
  9. ArrayList<String> moreLanguages = context.getBean("moreLanguages", ArrayList.class);
  10. moreLanguages.forEach(System.out::println);
  11. // getBeansOfType方法返回的类型为Map
  12. context.getBeansOfType(ArrayList.class).forEach((name, bean) -> {
  13. System.out.println(name + " : " + bean);
  14. });
  15. }
  16. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值