Spring的@Autowired 集合注入

说到@Autowired注解肯定发和@Resource,@Qualifier,@Primary三个注解有必然的相关性

简单介绍一下这四个注解:

@Autowired是Spring的注解,提供按照类型装配,也是本次xxx的主角,在Spring的装配中若是存在多个相同类型,则会装配失败,这就有引入@Qualifier注解了,@Qualifier按照name装配是Spring为了解决按照类型装配失败而提供的注解,当然了,避免类型装配多个实例导致的失败我们也可以使用@Primary标注实例,指定默认的装配实现,局限是只能指定一个,解决根本问题还得是使用@Qualifier注解或者@Resoure注解,@Resource注解是javaee提供的注解,按照name进行装配的!

@Autowired可以使用的场景:

成员变量:

注入普通的对象如,这个没啥好说的

public class Service {
    @Autowired
    private ServiceMap serviceMap;
}

注入集合(重点是这个啦,标星,标星******************************************************):

public class Service {
    @Autowired
    private Map<String, ServiceMap> map;
    @Autowired
    private List<ServiceMap> list;
    @Autowired
    private Set<ServiceMap> set;
}

这个用法惊艳到我了,搬了两年砖,第一次在项目中遇到注入集合这种特殊对象,当时有点蒙圈,居然还可以这样使用.........

简单研究了一下,这样注入集合的前提是ServiceMap的子类对象/实现类对象都交给ioc管理了,在

当前类加载时候ioc容器会初始化将这些被管理的实现类对象装入集合,注入到当前类中,注入map对象,kev是注入类的name,value是注入类对象,按照那么可以在map中获取到目标对象进行业务操作,注入set/list使用时候就需要按照字节码对象进行判断使用,这样有利于统一管理某个业务实现对象;

不过在注入集合的时候通常需要延迟加载,因为当前类加载之前,可能注入map中的实现类对象还没有被ioc扫描到,会找不到目标bean对象,使用@Lazy标注注入的集合,延迟在当前类中注入集合,确保目标bean都能被装配到集合

参数,没少:


    @Autowired
    public DataSource dataSource(BaseDSMsg msg){
        //todo ...
        return (DataSource) new DruidDataSource();
    }
}

方法


    public DataSource dataSource(@Autowired BaseDSMsg msg){
        //todo ...
        return (DataSource) new DruidDataSource();
    }

@Autowired主机标注参数和方法实质作用是一样的,没啥好讲的,,,

努力的搬砖人,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,


                
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @Resouce和@Autowired都是用于依赖注入的注解,但是它们有一些区别。@Resouce是JavaEE提供的注解,而@AutowiredSpring框架提供的注解。@Resouce默认按照名称进行装配,如果找不到对应名称的bean,则按照类型进行装配。而@Autowired默认按照类型进行装配,如果找不到对应类型的bean,则会报错。此外,@Resouce还可以通过name属性指定名称进行装配,而@Autowired可以通过required属性指定是否必须装配成功。 ### 回答2: @Resouce和@Autowired都是用于依赖注入的注解,用来自动装配Bean对象,但它们有以下不同: 1. 来源:@Resource是JavaEE提供的注解,而@Autowired是由Spring框架提供的注解。 2. 注入方式:@Resource按照名称进行匹配注入,@Autowired默认按照类型进行匹配注入。 3. 属性:@Resource注解没有任何属性,而@Autowired注解有一些属性,如required、qualifier和primary等。 4. JSR-250规范:@Resource注解是JSR-250规范中定义的注解,而@AutowiredSpring框架特有的注解。 5. 兼容性:@Resource注解是兼容JavaEE规范的注解,可以被其他JavaEE容器解析,而@Autowired注解只能被Spring框架解析。 总体来说,两者的作用相似,都可以实现依赖注入的功能,但使用的规范和源头不同。在实际开发中,可以根据具体情况选择适合自己的注解。 ### 回答3: @Resource和@Autowired都是Spring框架中用于实现依赖注入的注解。它们的作用是注入bean对象,减少手动的对象创建和依赖查询。 首先讲一下@Resource注解。@Resource注解是由JSR250规范提供的,它有两个常用的属性name和type。name属性用于指定需要注入的bean的名称,如果不指定,则默认按照属性名进行查找。type属性用于指定需要注入的bean的类型。@Resource注解默认按照name进行查找,如果找不到对应的bean,则会按照type进行查找。如果即没有指定name也没有指定type,则会按照属性的类型进行查找。 而@Autowired注解是由Spring提供的,它的作用和@Resource类似,也用于注入bean对象。@Autowired注解默认按照属性的类型进行查找,并且需要配合@Autowired注解的required属性,来指定该属性是否必须进行注入。@Autowired注解也可以在构造方法、方法参数以及集合类型的注入中使用。 总结一下两者的区别: 1. 来源不同:@Resource注解由JSR250规范提供,而@Autowired注解由Spring框架提供。 2. 属性选择不同:@Resource注解可以根据name或type进行查找,默认是按照name进行查找,而@Autowired注解默认是按照属性的类型进行查找。 3. 结合注解不同:@Autowired注解可以和required属性进行结合使用,来指定属性是否必须进行注入,而@Resource注解没有类似的属性选择。 综上所述,@Resource和@Autowired注解在实现依赖注入功能上有一些区别,开发者在使用时要根据具体情况选择适合的注解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值