>依赖注入(集合/数组/set/map)

之前我们对于基本数据类型,字符串,引用数据类型,我们采用的ref或者value,对于集合,如何注入,如何创建?

User类中:

private List<String> list;
public List<String> getList() {return list;
}
public void setList(List<String> list) {this.list = list;
}private String[] food;
public String[] getFood() {return food;
}
public void setFood(String[] food) {this.food = food;
}private Set<String> book;
public Set<String> getBook() {return book;
}
public void setBook(Set<String> book) {this.book = book;
}private Map<String, String> map;
public Map<String, String> getMap() {return map;
}
public void setMap(Map<String, String> map) {this.map = map;
}

Spring配置:

<!-- 集合的注入 --><bean id="userList" class="com.langsin.pojo.User" ><property name="list"><!-- 创建一个ArrayList的实例对象 --><list><value>apple</value><value>melon</value><value>watermelon</value><value>banana</value></list></property><property name="food"><array><value>hamburger</value><value>melon</value><value>watermelon</value><value>banana</value></array></property><property name="book"><set><value>西游记</value><value>红楼梦</value></set></property><property name="map"><map><entry key="apple" value="苹果"></entry><entry key="banana" value="香蕉"></entry><entry key="melon"><value>甜瓜</value></entry></map></property></bean>

测试:

@Test
public void getUserList() throws Exception{String configLocations="SpringConfig.xml";ApplicationContext context = new ClassPathXmlApplicationContext(configLocations);User user=context.getBean("userList",User.class);List<String> list = user.getList();for (String string : list) {System.out.println(string);}String[] food = user.getFood();for (String string : food) {System.out.println(string);}Set<?> set=user.getBook();for (Object object : set) {System.out.println(object);}Map<String, String> map=user.getMap();Set<String> keySet = map.keySet();for (String string : keySet) {System.out.print(string);System.out.println(map.get(string));}
}

>util命名空间简化配置

引入util命名空间,添加约束文件(没网不提示的时候可以本地添加):

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"xmlns:util="http://www.springframework.org/schema/util"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd"></beans>

之后可以这样写:

<bean id="userList" class="com.langsin.pojo.User" p:list-ref="fruitList"
p:food-ref="foodList">
</bean>
<!-- p:属性名 ="" --><util:list id="fruitList">
<value>apple</value>
<value>melon</value>
<value>watermelon</value>
<value>banana</value>
</util:list><!-- 使用util命名空间时,数组和util集合看作一回事 -->
<util:list id="foodList">
<value>hamburger</value>
<value>melon</value>
<value>watermelon</value>
<value>banana</value>
</util:list>

>自动注入(推荐使用byName)

在Spring配置文件中,去掉明显的配置依赖关系。

之前的方式存在的明显配置依赖关系  p:dao-ref="roleDao  :

<bean id="roleService" class="com.langsin.service.RoleService" p:dao-ref="roleDao"/>
<bean id="roleDao" class="com.langsin.dao.impl.RoleDaoImpl"/>

更改后:

<!--自动注入的两种方式:
1.按类型byType :当spring加载到属性需要注入,就去当前容器中看是否存在对应类型的Bean,有就注入到属性中去(这个属性可以写在beans上,作为全局的配置)注意:当一种类型,有多个实现类时,如果自动注入的时接口类型,这种方式就会报错,spring无法知道具体使用哪个实现类。2.按名称byName:当spring加载到属性需要注入,就去当前容器中看是否存在id名称与属性相同的,而且类型对应的Bean,有就注入到属性中去。
-->
<bean id="roleService" class="com.langsin.service.RoleService" autowire="byType"/>
<bean id="roleDao" class="com.langsin.dao.impl.RoleDaoImpl"/><bean id="roleService" class="com.langsin.service.RoleService" autowire="byName"/>
<bean id="dao" class="com.langsin.dao.impl.RoleDaoImpl"/>

(spring对一个属性进行注入时,拿到属性名,利用反射,调用对应的set方法去完成赋值)

因此,使用byName,创建RoleService 时,会根据属性名dao,去找管理的bean中id名为dao的进行注入。

public class RoleService {private RoleDao dao=null;public void setDao(RoleDao dao){this.dao=dao;}public void queryRoleList() throws Exception{dao.queryRoleList();}
}

Spring 依赖注入(集合)/util命名空间/自动注入相关推荐

  1. Spring学习第5篇:自动注入(autowire)详解

    大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...

  2. Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案

    起因 开发过程中在过滤器(filter)中注入Bean出现空指针异常,通过查找资料了解空指针的原因,特此记录. 问题分析 由于其他bean在service,controller层注入一点问题也没有,开 ...

  3. Spring三种方法的注解自动注入

    1 @Autowired注解 @Autowired是Spring提供的自动注入的方法,该注解可以放在变量和方法上,在bean+返回值类型的注解中,@Autowired还可以放在参数前:@Autowir ...

  4. 【安全牛学习笔记】课时94 SQLMAP自动注入-REQUEST和SQLMAP自动注入-OPTIMIZATION

    SQLMAP自动注入02-----REQUEST --delay 每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟 --timeout 请求超时时间,浮点数,默认为30秒 --retr ...

  5. Spring LTW 切面 Configurable autowire null 自动注入失败的原因及解决方案

    本文主要介绍使用spring+aspectj使用动态织入方法实现Aop,以及遇到的问题及解决方案. 基于jdk1.8版本.spring-5.2.5版本.aspectj-1.9.5版本.bytebudd ...

  6. 【Spring】Spring 自动注入(autowire)详解

    1.概述 转载:添加链接描述 2. 手动注入的不足 [Spring]Spring 依赖注入之手动注入 上篇文章中介绍了依赖注入中的手动注入,所谓手动注入是指在xml中采用硬编码的方式来配置注入的对象, ...

  7. Spring第8篇:自动注入(autowire)详解

    本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给 ...

  8. Spring系列之自动注入(autowire)详解

    本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给 ...

  9. 网店版重生系列:都是Spring配置中自动注入惹的祸

    在对Spring Container管理的bean进行配置时,有一个很好用的功能就是自动注入,可以根据不同规则对bean所依赖的bean进行自动set,相信最常用的就是设置default-autowi ...

最新文章

  1. 震精~python运算符还能这么玩~到底这么做到的?神级程序员解密!
  2. [CareerCup] 15.5 Denormalization 逆规范化
  3. CaaS环境下实践经验总结(二):监控系统部署
  4. “互联网+”促传统企业三大转型
  5. mysql 迁移 nosql_从关系型Mysql到Nosql HBase的迁移实践
  6. C语言查看文件fp指针位置
  7. 下列哪个适合做链栈_外贸企业如何做Google推广?自然排名和付费广告哪个更适合你?...
  8. 如何取消IntelliJ IDEA打开默认项目配置
  9. java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...
  10. Address already in use: bind 端口被占用的解决办法
  11. leveldb学习:DBimpl
  12. Linux 入侵排查
  13. 关于吾爱(52)破解网注册时临时安全验证码以及填完信息没有确认或提交按钮的问题
  14. Wallpaper Engine软件——html做为壁纸
  15. mellanox 网卡驱动,Mellanox网卡OFED驱动安装
  16. c语言课程设计歇后语,拼音字母c开头的歇后语
  17. 什么是SaaS?SaaS系统有什么特征?
  18. 鬼故事~ 媚娘[完结版]
  19. 软件开发中的 Kata 模型是什么,和精益有什么关系?
  20. Checkra1n越狱更新0.12.4版本,支持iOS14.7.1越狱

热门文章

  1. 《Go 语言程序设计》读书笔记(十)反射
  2. mysql 优化 系统_MySQL 优化(一)
  3. 变形 圆形_中山125T圆形玻璃钢冷却塔现场安装
  4. SpringAOP的几大通知
  5. 单链表实现反转的三种方法
  6. centos7搭建hadoop
  7. jenkins配置用户权限
  8. vtkSuperquadricSource:创建以原点为中心的多边形超二次曲面
  9. 使用 Typescript 踩 react-redux 的坑
  10. Zabbix分布式监控(zabbix-proxy)的配置关键点