热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

八.Spring的属性注入注入对象,复杂的集合类型属性

在上一篇博客上,用字符串类型的属性简单的介绍了下Spring的属性注入,这片文章会介绍更高级的属性注入.属性注入-注入对象类型场景介绍:我们现在要做一个新增用户的操作.在不使用

在上一篇博客上,用字符串类型的属性简单的介绍了下Spring的属性注入,这片文章会介绍更高级的属性注入.

属性注入-注入对象类型

场景介绍:我们现在要做一个新增用户的操作.
在不使用Spring类开发时,我们传统的开发应该是UserService通过UserDao来操作数据库实现对User的新增,代码如下.
传统的开发:

package cn.com.yves.spring;public class UserDao {public void addUser() {System.out.println("add user success!");}}

public class UserService {private UserDao dao = null;/* 提供UserDao的构造方法 或 set方法进行属性的赋值 */public UserService(UserDao dao) {this.dao = dao;}public void setDao(UserDao dao) {this.dao = dao;}/* 新增操作 */public void addUser() {this.dao.addUser();}}

使用Spring开发
在UserService中的属性dao就是一个对象类型.这里就需要用到注入对象类型的属性.要用到属性ref.ref 属性可以引用另一个 bean 的 id 或 name.

<bean id&#61;"userService" class&#61;"cn.com.yves.spring.UserService"><property name&#61;"dao" ref&#61;"userDao">property>bean>

name属性值dao为类UserService中的属性,ref的值:的id值.

具体代码如下:

package cn.com.yves.spring;public class UserDao {public void addUser() {System.out.println("add user success!");}
}

package cn.com.yves.spring;public class UserService {private UserDao dao &#61; null;public void setDao(UserDao dao) {this.dao &#61; dao;}public void addUser() {System.out.println("do add user service.");this.dao.addUser();}}


<beans xmlns&#61;"http://www.springframework.org/schema/beans" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id&#61;"userService" class&#61;"cn.com.yves.spring.UserService"><property name&#61;"dao" ref&#61;"userDao">property>bean><bean id&#61;"userDao" class&#61;"cn.com.yves.spring.UserDao">bean>beans>

测试方法:

&#64;Testpublic void test() {// 1 加载spring配置文件&#xff0c;根据配置创建对象ApplicationContext context &#61; new ClassPathXmlApplicationContext("Application.xml");// 2 配置文件中的id获取创建的对象UserService service &#61; (UserService) context.getBean("userService");service.addUser();}

结果:

do add user service.
add user success!

spring-属性注入(对象类型)

属性注入-注入复杂类型属性

这里以简单的String类型为例子,如果子类型时对象类型,可以参考注入对象的ref属性来注入.

User.java

package cn.com.yves.spring;import java.util.List;
import java.util.Map;
import java.util.Properties;public class User {private String[] arrays;private List lists;private Map maps;private Properties props; // 最终实现的mappublic String[] getArrays() {return arrays;}public void setArrays(String[] arrays) {this.arrays &#61; arrays;}public List getLists() {return lists;}public void setLists(List lists) {this.lists &#61; lists;}public Map getMaps() {return maps;}public void setMaps(Map maps) {this.maps &#61; maps;}public Properties getProps() {return props;}public void setProps(Properties props) {this.props &#61; props;}public void showInfo() {System.out.println("message:" &#43; this.arrays &#43; "\t" &#43; this.lists &#43; "\t" &#43; this.maps &#43; "\t" &#43; this.props);}}

Application.xml


<beans xmlns&#61;"http://www.springframework.org/schema/beans" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id&#61;"user" class&#61;"cn.com.yves.spring.User"><property name&#61;"arrays"><list><value>array1value><value>array2value><value>array3value>list>property><property name&#61;"lists"><list><value>list1value><value>list2value><value>list3value>list>property><property name&#61;"maps"><map><entry key&#61;"aa" value&#61;"lucy">entry><entry key&#61;"bb" value&#61;"jack">entry><entry key&#61;"cc" value&#61;"yves">entry>map>property><property name&#61;"props"><props><prop key&#61;"driverclass">com.mysql.jdbc.Driverprop><prop key&#61;"username">rootprop>props>property>bean>beans>

测试代码:

&#64;Testpublic void test() {// 1 加载spring配置文件&#xff0c;根据配置创建对象ApplicationContext context &#61; new ClassPathXmlApplicationContext("Application.xml");// 2 配置文件中的id获取创建的对象User user &#61; (User) context.getBean("user");user.showInfo();}

结果:

message:[Ljava.lang.String;&#64;77ec78b9 [list1, list2, list3] {aa&#61;lucy, bb&#61;jack, cc&#61;yves} {driverclass&#61;com.mysql.jdbc.Driver, username&#61;root}

spring-属性注入(复杂类型)


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
author-avatar
星晴SOS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有