2019独角兽企业重金招聘Python工程师标准>>>

上篇简单介绍了一下bean配置文件注入简单的属性和复杂一点的类注入,今天说一下其他类型的注入。

spring中提供配置Bean有三种实例化的方式

  1. 类构造器实例化
  2. 静态工厂方法实例化
  3. 实例工厂方法实例化

类构造器实例化就是昨天说的那种

< bean id ="engine" class ="com.demo.spring.car.QiyouEngine" ></ bean >

使用这个实例化QiyouEngine类,调用的是类默认的构造函数

如果想要在构造器里加入参数就得在替换掉上篇写在bean标签里的property标签,改成<constructor-arg></constructor-arg>

比如把上篇中使用set方法注入的属性name和engine,改成用构造器注入就的这么写:

< bean id ="car" class ="com.demo.spring.car.Car" > < constructor-arg index ="0" type ="java.lang.String" value ="宝马" ></ constructor-arg > < constructor-arg index ="1" type ="com.demo.spring.car.IEngine" ref ="engine" ></ constructor-arg > </ bean >

<constructor-arg>标签中index指的是该属性在构造器中参数的顺序,从0开始。而type是写注入属性的类型和构造器的顺序是一样的

public Car(String name,IEngine engine){ this .name = name; this .engine = engine; }

接下来讲如何注入集合类型,如List,Set,Map等

List的注入和数组的注入是采取相同的标签

< bean id ="hobby" class ="com.demo.spring.Hobby" > < property name ="hobbys" > < list > < value > 篮球 </ value > < value > 足球 </ value > </ list > </ property > </ bean >

hobby类的结构

public class Hobby { private List < String > hobbys; public List < String > getHobbys() { return hobbys; } public void setHobbys(List < String > hobbys) { this .hobbys = hobbys; } @Override public String toString() { return " Hobby [hobbys= " + hobbys + " ] " ; } }

以上执行的结果

由于原有的方式List是写在bean标签内,得不到复用,我们可以借助spring提供的ListFactoryBean来实现

< bean id ="hobby" class ="com.demo.spring.Hobby" > < property name ="hobbys" ref ="hobbys" ></ property > </ bean > < bean id ="hobbys" class ="org.springframework.beans.factory.config.ListFactoryBean" > < property name ="sourceList" > < list > < value > 篮球 </ value > < value > 足球 </ value > </ list > </ property > </ bean >

需要说明的是虽然上面使用<list>可以实现这样的效果,不过这是旧的标签了,我们照样可以在spring 3.2中使用,但是官方提供了新的方式

首先需要在xml顶部添加一些信息,加粗的就是需要添加的命名空间

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

使用spring新标签<util:list>,大大简化了编写的复杂度

< util:list id ="hobbys" list-class ="java.util.ArrayList" > < value > 篮球 </ value > < value > 足球 </ value > </ util:list >

其他的Map和Set标签可以查看官网的api文件

http://docs.spring.io/spring/docs/3.2.8.RELEASE/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-map

转载于:https://my.oschina.net/u/557735/blog/208863

spring学习4-bean配置文件相关推荐

  1. spring学习笔记之配置文件applicationContext.xml

    1:spring中,用配置文件时 <bean>的<scope>属性是singleton时在创建容器时创建对象,创建一个容器在,对象在: <bean>的<sco ...

  2. Spring学习3 - Bean的属性、DI依赖注入三种方式

    文章目录 1. 属性设置 - XML配置文件.以及与其等价的注解形式 2. 依赖注入DI的方式 2.1 属性自动注入 - 不推荐 代码准备阶段 代码测试 2.2 子节点构造器注入 - 不推荐 2.3 ...

  3. Spring学习笔记-Bean初始化销毁

    1.bean的初始化操作 1.1通过在配置文件中,设置bean的init-method方法,destory-method方法,spring框架会通过反射机制来调用 java类 package com. ...

  4. Spring学习之Bean的配置

    本文将会介绍Spring框架中wiring beans的相关内容,包括:bean的声明与创建.在xml文件中对bean基本使用方法的配置以及Spring 3中新特性Spring Expression ...

  5. 【Spring学习】Bean生命周期

    我理解的Bean生命周期包括两个方面: Bean何时创建,何时销毁 Bean从创建到销毁的执行流程 一.Bean创建与销毁 Bean的创建时机主要由几个配置项共同来决定,包括: scope属性,决定是 ...

  6. spring学习-2 Bean的装配

    Spring 支持 3 种依赖注入的方式 属性注入 构造方法注入 工厂方法注入 属性注入: 属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象 属性注入使用 <property ...

  7. Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】...

    本文借鉴:Spring学习,@Bean 的用法(特此感谢!) 自动装配 1.歧义性 我们知道用@Autowired可以对bean进行注入(按照type注入),但如果有两个相同类型的bean在IOC容器 ...

  8. Spring学习(五)bean装配详解之 【XML方式配置】

    本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原 ...

  9. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  10. 【Spring Boot学习笔记】——配置文件

    两种类型的配置文件 properties和yml 作为全局配置文件,配置文件名是固定的: application.properties application.yml 配置文件的作用:修改Spring ...

最新文章

  1. java B2B2C 源码 多级分销Springcloud多租户电子商城系统(十)用spring Restdocs创建API文档...
  2. android 怎么判断activity 从哪里启动的
  3. 未授权用户在此计算机上的的请求登陆类型
  4. kubernetes入门(06)kubernetes的核心概念(3)
  5. Node.js 博客实例(一)简单博客
  6. smb服务器配置过程遇到错误及解决
  7. 网络工程师要如何选择?
  8. 神舟笔记本电源管理软件_笔记本电脑长期不用充不上电了?原来问题就出在这儿...
  9. CodeForces413E Maze 2D
  10. Linux之文件系统介绍
  11. Laravel 安装mysql、表增加模拟数据、生成控制器
  12. window自动生成数据库连接字符串
  13. Gson解析json文件
  14. 图像辨识系统神经网络图,图像识别技术神经网络
  15. android渠道包作用,Android多渠道打包的作用及简单使用
  16. 2018,灵魂无处安放的一年
  17. Preface Numbering序言页码
  18. Linux服务器之Samba匿名访问配置
  19. Radiology:脑损伤患者基于语言任务的功能磁共振成像与静息态功能磁共振成像对躯体运动网络的识别
  20. Kafka时间轮学习总结

热门文章

  1. java中各种常见的异常
  2. @NotEmpty@NotNull和@NotBlank的区别
  3. kvm系列之四:热添加技术
  4. markdown 常用语法格式
  5. 《基于Nginx的中间件架构》学习笔记---3.nginx的目录分析
  6. Error:Could not find common.jar (android.arch.core:common:1.0.0)
  7. 量化投资与Python
  8. FindBugs-IDEA插件的使用
  9. CridView创建 实现选中,编辑,取消,删除
  10. HDU 5908 Abelian Period 可以直接用multiset