【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

 

实现效果:

 

相关文章
|
26天前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
36 5
|
27天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
32 2
|
11天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
11天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
11天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
11天前
|
Java 开发者
|
27天前
|
Java 开发者
在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素
在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素。通过哈希表和红黑树两种模式,Set能够高效地识别并拒绝重复元素的入侵,确保集合的纯净。无论是HashSet还是TreeSet,都能在不同的场景下发挥出色的表现,成为开发者手中的利器。
26 2
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
163 2
|
9天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
20 2
 SpringBoot入门(7)- 配置热部署devtools工具

热门文章

最新文章