ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring的@Autowired 集合注入

2022-09-15 18:30:30  阅读:286  来源: 互联网

标签:装配 Autowired 对象 Spring 集合 注解 注入


 原文链接:https://blog.csdn.net/weixin_45874214/article/details/125834575

 

订阅专栏
说到@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主机标注参数和方法实质作用是一样的,没啥好讲的,,,

 

标签:装配,Autowired,对象,Spring,集合,注解,注入
来源: https://www.cnblogs.com/kelelipeng/p/16697588.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有