【spring set注入 注入集合】 使用set注入的方式注入List集合和Map集合/将一个bean注入另一个Bean

简介: Dao层代码: 1 package com.it.dao; 2 3 public interface SayHell { 4 public void sayHello(); 5 } View Code   Dao的Impl实现层: 1 package com.

 

Dao层代码:

1 package com.it.dao;
2 
3 public interface SayHell {
4         public void sayHello();
5 }
View Code

 

Dao的Impl实现层:

  1 package com.it.dao.impl;
  2 
  3 import java.util.List;
  4 import java.util.Map;
  5 
  6 import com.it.dao.SayHell;
  7 
  8 /**
  9  * Spring如何知道setter方法?如何将值注入进去的呢?其实方法名是要遵守约定的,setter注入的方法名要遵循“JavaBean getter/setter 方法命名约定”:
 10  * 
 11    JavaBean:是本质就是一个POJO类,但具有一下限制:
 12          该类必须要有公共的无参构造器,如public HelloImpl4() {};
 13          属性为private访问级别,不建议public,如private String message;
 14          属性必要时通过一组setter(修改器)和getter(访问器)方法来访问;
 15      setter方法,以“set” 开头,后跟首字母大写的属性名,如“setMesssage”,简单属性一般只有一个方法参数,方法返回值通常为“void”;
 16      getter方法,一般属性以“get”开头,对于boolean类型一般以“is”开头,后跟首字母大写的属性名,如“getMesssage”,“isOk”;
 17                   还有一些其他特殊情况,比如属性有连续两个大写字母开头,如“URL”,则setter/getter方法为:“setURL”和“getURL”,其他一些特殊情况请参看“Java Bean”命名规范。
 18  * @return
 19  */
 20 public class SayHelloImpl4 implements SayHell {
 21     
 22     private List<String> listValue;
 23     
 24     private Map<String,Integer> mapValue;
 25     
 26     private int fistBleed;
 27     
 28     private Map<String,SayHelloImpl4> firstMap;
 29     
 30     
 31     
 32 
 33     public Map<String, SayHelloImpl4> getFirstMap() {
 34         return firstMap;
 35     }
 36 
 37 
 38     public void setFirstMap(Map<String, SayHelloImpl4> firstMap) {
 39         this.firstMap = firstMap;
 40     }
 41 
 42 
 43     public int getFistBleed() {
 44         return fistBleed;
 45     }
 46 
 47 
 48     public void setFistBleed(int fistBleed) {
 49         this.fistBleed = fistBleed;
 50     }
 51 
 52 
 53     public List<String> getListValue() {
 54         return listValue;
 55     }
 56 
 57 
 58     public void setListValue(List<String> listValue) {
 59         this.listValue = listValue;
 60     }
 61 
 62     
 63 
 64     public Map<String, Integer> getMapValue() {
 65         return mapValue;
 66     }
 67 
 68 
 69     public void setMapValue(Map<String, Integer> mapValue) {
 70         this.mapValue = mapValue;
 71     }
 72 
 73 
 74     @Override
 75     public void sayHello() {
 76         int i=1;
 77         for (String string : listValue) {
 78             System.out.println(i+"、"+string);
 79             i++;
 80         }
 81 
 82     }
 83     
 84     public void sayMapGood(){
 85         int size = mapValue.size();
 86         if(size!=0){
 87             for(int a=1; a<=size ;a++){
 88                 System.out.println(a+"、"+mapValue.get(String.valueOf(a)));
 89             }
 90         }
 91     }    
 92     
 93     public void sayMapGood2(){
 94         int size = firstMap.size();
 95         if(size!=0){
 96             System.out.println(firstMap.get("1").fistBleed);
 97         }
 98     }
 99 
100 }
View Code

 

配置文件setList.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <beans  
 3 xmlns="http://www.springframework.org/schema/beans"  
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 5 xmlns:context="http://www.springframework.org/schema/context"  
 6 xsi:schemaLocation="  
 7 http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
 8 http://www.springframework.org/schema/context                http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
 9 
10 
11      
12     <!-- 测试1  使用set注入方法       注入集合类型   Spring不仅能注入简单类型数据,还能注入集合(Collection、无序集合Set、有序集合List)类型、数组(Array)类型、字典(Map)类型数据、Properties类型数据 -->
13     <bean id="listBean" class="com.it.dao.impl.SayHelloImpl4">
14         <property name="listValue">
15             <list><!-- <list value-type="java.lang.String"> 如果是set集合就是用<set>标签,可以在此指定泛型,若不指定,则默认是String类型的 -->
16                 <value>德玛西亚</value>
17                 <value>艾欧尼亚</value>
18                 <value>暗影岛</value>
19                 <value>德莱文明</value>
20             </list>
21         </property>
22     </bean>
23     
24     <!-- Spring容器目前能对各种基本类型把配置的String参数转换为需要的类型,
25             如果转换出错,将抛出相应的异常,
26             默认的<value>中间的值均是String类型的
27          Spring类型转换系统对于boolean类型进行了容错处理,除了可以使用“true/false”标准的Java值进行注入,还能使用“yes/no”、“on/off”、“1/0”来代表“真/假” -->
28     
29     <!-- 测试2 使用set注入方法     map -->
30     <bean id="mapBean" class="com.it.dao.impl.SayHelloImpl4">
31         <property name="mapValue">
32             <map key-type="java.lang.String" value-type="java.lang.Integer">
33                 <entry>
34                     <key>
35                         <value>1</value>
36                     </key>
37                     <value>
38                         123
39                     </value>
40                 </entry>
41                 <entry key="2" value="456"></entry>
42                 <entry key="3" value="789"></entry>
43             </map>
44         </property>
45     </bean>
46     
47     
48     <!-- 测试3  一个bean注入到另一个bean中 -->
49     <bean id="intBean" class="com.it.dao.impl.SayHelloImpl4">
50         <property name="fistBleed">
51             <value type="java.lang.Integer">998</value>
52         </property>
53     </bean>
54     
55     <bean id="mapBean2" class="com.it.dao.impl.SayHelloImpl4">
56         <property name="firstMap">
57             <map key-type="java.lang.String" value-type="com.it.test.SayHelloImpl4">
58                 <entry>
59                     <key>
60                         <value>1</value>
61                     </key>
62                     <ref bean="intBean"/>
63                     
64                 </entry>
65             </map>
66         </property>
67     </bean>
68     
69     
70     
71     
72     
73 </beans>  
View Code

 

实现层 测试类:SayHelloTest4.java

 1 package com.it.test;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.FileSystemXmlApplicationContext;
 6 
 7 import com.it.dao.SayHell;
 8 import com.it.dao.impl.SayHelloImpl4;
 9 
10 public class SayHelloTest4 {
11     
12     ApplicationContext applicationContext =new FileSystemXmlApplicationContext("resources/setList.xml");
13     @Test
14     public void testListSet(){
15         SayHell sayHell =  applicationContext.getBean("listBean",SayHell.class);
16         sayHell.sayHello();
17         
18         SayHelloImpl4 sayHell4 =  (SayHelloImpl4) applicationContext.getBean("mapBean");
19         sayHell4.sayMapGood();
20         
21         
22         SayHelloImpl4 sayHell42 =  (SayHelloImpl4) applicationContext.getBean("mapBean2");
23         sayHell42.sayMapGood2();
24     }    
25 }    
View Code

 

实现效果:

 

相关文章
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
158 1
|
4月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
392 1
|
1月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
5月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
314 121
|
5月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
228 43
|
5月前
|
存储 C++ 容器
unordered_set、unordered_multiset、unordered_map、unordered_multimap的介绍及使用
unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。在unordered_set中,元素的值同时也是唯一地标识它的key。在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。它的迭代器至少是前向迭代器。前向迭代器的特性。
258 0
|
5月前
|
编译器 C++ 容器
用一棵红黑树同时封装出map和set
再完成上面的代码后,我们的底层代码已经完成了,这时候已经是一个底层STL的红黑树了,已经已符合库里面的要求了,这时候我们是需要给他穿上对应的“衣服”,比如穿上set的“衣服”,那么这个穿上set的“衣服”,那么他就符合库里面set的要求了,同样map一样,这时候我们就需要实现set与map了。因此,上层容器map需要向底层红黑树提供一个仿函数,用于获取T当中的键值Key,这样一来,当底层红黑树当中需要比较两个结点的键值时,就可以通过这个仿函数来获取T当中的键值了。我们就可以使用仿函数了。
74 0
|
5月前
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
245 0
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV

热门文章

最新文章

下一篇
oss云网关配置