版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/qilixiang012/article/details/28233811

概要(红色为上一篇所讲,蓝色为本节所讲)

字面值

  • 字面值:可用字符串表示的值。能够通过<value>元素标签或value属性进行注入
  • 基本数据类型及其封装类、String等类型都能够採取字面值注入的方式
  • 若字面值中包括特殊字符。能够使用<![CDATA[]]>把字面值包裹起来
引用其它Bean
  • 组成应用程序的Bean常常须要相互协作完毕应用程序的功能,要使Bean能够相互訪问。就必须在Bean配置文件里指定对Bean的引用
  • 在Bean的配置文件里,能够通过 <ref>元素或ref属性为Bean属性或构造器參数指定对Bean的引用
  • 也能够在属性或构造器里包括Bean的声明。这种Bean称为内部Bean
注入參数具体解释:null值和联机属性
  • 能够使用专用的<null/>元素标签为Bean的字符串或其它对象的属性注入null值
  • 和struts、hibernate等框架一样。spring支持级联属性的配置
集合属性
  • 在spring中能够通过一组内置的xml标签(比如:<list>,<set>或<map>)来配置集合属性
  • 配置java.util.List类型的属性,须要指定<list>标签,在标签里包括一些元素,这些标签能够通过<value>指定简单的常量值。通过<ref>指定对其它Bean的引用。通过<bean>指定内置Bean定义。通过<null/>指定空元素。甚至能够内嵌其它集合
  • 数组的定义和List一样。都使用<list>
  • 配置java.util.Set须要使用<set>标签,定义元素的方法与List一样
  • Java.util.Map通过<map>标签定义。<map>标签里能够使用<entry>作为子标签,每一个条目包括一个键和一个值
  • 必须在<key>标签里定义键
  • 由于键和值的类型没有限制,所以能够自由地为它们指定<value>,<ref>,<bean>或<null>元素
  • 能够将Map的键和值作为<entry>的属性定义:简单常量使用key和value来定义;Bean引用通过key-ref和value-ref属性定义
  • 使用<props>定义java.util.Properties,该标签使用多个<prop>作为子标签。

    每一个<prop>标签必须定义key属性

使用utility scheme定义集合
  • 使用主要的集合标签定义集合时。不能将集合作为独立的Bean定义,导致其它Bean无法引用该集合,所以无法在不同Bean之间共享集合
  • 能够使用util scheme 里的集合标签定义独立的集合Bean。须要注意的是,必须在<beans>根元素里添加util scheme定义
使用p命名空间
  • 为了简化XML文件的配置,越来越多的XML文件採用属性而非子元素配置信息
  • spring从2.5版本号開始引入了一个新的p命名空间,能够通过 <bean>元素属性的方式配置 Bean的属性
  • 使用p命名空间后。基于XML的配置方式将进一步简化
实例代码具体解释:
代码结构:
Car.java
package com.coslay.beans;public class Car {private String brand;private String corp;private double price;private int maxSpeed;public Car(String brand, String corp, double price) {super();this.brand = brand;this.corp = corp;this.price = price;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getCorp() {return corp;}public void setCorp(String corp) {this.corp = corp;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getMaxSpeed() {return maxSpeed;}public void setMaxSpeed(int maxSpeed) {this.maxSpeed = maxSpeed;}public Car(String brand, String corp, int maxSpeed) {super();this.brand = brand;this.corp = corp;this.maxSpeed = maxSpeed;}public String toString() {return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price+ ", maxSpeed=" + maxSpeed + "]";}
}

Person.java

package com.coslay.beans;public class Person {private String name;private int age;private Car car;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";}public Person() {// TODO Auto-generated constructor stub}public Person(String name, int age, Car car) {super();this.name = name;this.age = age;this.car = car;}}

package com.coslay.beans.collectioln;import java.util.Properties;public class DataSource {private Properties properties;public Properties getProperties() {return properties;}public void setProperties(Properties properties) {this.properties = properties;}@Overridepublic String toString() {return "DataSource [properties=" + properties + "]";}}

DataSource.java
package com.coslay.beans.collectioln;import java.util.Properties;public class DataSource {private Properties properties;public Properties getProperties() {return properties;}public void setProperties(Properties properties) {this.properties = properties;}@Overridepublic String toString() {return "DataSource [properties=" + properties + "]";}}

Person.java

package com.coslay.beans.collectioln;import java.util.List;import com.coslay.beans.Car;public class Person {private String name;private int age;private List<Car> cars;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {// TODO Auto-generated constructor stub}public List<Car> getCars() {return cars;}public void setCars(List<Car> cars) {this.cars = cars;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";}public Person(String name, int age, List<Car> cars) {super();this.name = name;this.age = age;this.cars = cars;}
}

NewPerson.java

package com.coslay.beans.collectioln;import java.util.List;
import java.util.Map;import com.coslay.beans.Car;public class NewPerson {private String name;private int age;private Map<String, Car> cars;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public NewPerson() {// TODO Auto-generated constructor stub}public Map<String, Car> getCars() {return cars;}public void setCars(Map<String, Car> cars) {this.cars = cars;}@Overridepublic String toString() {return "NewPerson [name=" + name + ", age=" + age + ", cars=" + cars+ "]";}public NewPerson(String name, int age, Map<String, Car> cars) {super();this.name = name;this.age = age;this.cars = cars;}}

Main.java

package com.coslay.beans.collectioln;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");Person person = (Person) ctx.getBean("person5");System.out.println(person);NewPerson newPerson = (NewPerson) ctx.getBean("newPerson");System.out.println(newPerson);DataSource dataSource = ctx.getBean(DataSource.class);System.out.println(dataSource.getProperties());}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?

> <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" xmlns:p="http://www.springframework.org/schema/p" 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-4.0.xsd"> <!-- 配置bean class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无參数的构造器 id:标识容器中的bean。

id唯一 --> <bean id="helloWorld" class="com.coslay.beans.HelloWorld"> <property name="name" value="yyz"></property> </bean> <!-- 通过构造方法来配置bean的属性 --> <bean id="car" class="com.coslay.beans.Car"> <constructor-arg value="Audi" index="0"></constructor-arg> <constructor-arg value="ShangHai" index="1"></constructor-arg> <constructor-arg value="300000" type="double"></constructor-arg> </bean> <!-- 使用构造器注入属性值能够指定參数的位置和參数的类型。以区分重载的构造器 --> <bean id="car2" class="com.coslay.beans.Car"> <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg> <!-- 假设字面值包括特殊字符能够使用<![CDATA[]]>包裹起来 --> <!-- 属性值也能够使用value子结点进行配置 --> <constructor-arg type="java.lang.String"> <value><![CDATA[<Shanghai^>]]></value> </constructor-arg> <constructor-arg type="int"> <value>250</value> </constructor-arg> </bean> <bean id="person" class="com.coslay.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <!-- 能够使用property的ref属性建立bean之间的引用关系 --> <!-- <property name="car" ref="car2"></property> --> <!-- <property name="car"> <ref bean="car2"/> </property> --> <!-- 内部bean,不能被外部引用。仅仅能在内部使用--> <property name="car"> <bean class="com.coslay.beans.Car"> <constructor-arg value="Ford"></constructor-arg> <constructor-arg value="Changan"></constructor-arg> <constructor-arg value="20000" type="double"></constructor-arg> </bean> </property> </bean> <bean id="person2" class="com.coslay.beans.Person"> <constructor-arg value="Jerry"></constructor-arg> <constructor-arg value="25"></constructor-arg> <!-- <constructor-arg ref="car"></constructor-arg> --> <!-- 測试赋值null --> <!-- <constructor-arg><null/></constructor-arg> --> <constructor-arg ref="car"></constructor-arg> <!-- 为级联属性赋值。

注意:属性须要先初始化后才干够为级联属性赋值。否则会有异常,和struts2不同--> <property name="car.maxSpeed" value="250"></property> </bean> <!-- 測试怎样配置集合属性 --> <bean id="person3" class="com.coslay.beans.collectioln.Person"> <property name="name" value="Mike"></property> <property name="age" value="28"></property> <property name="cars"> <!-- 使用List节点为List类型的属性赋值 --> <list> <ref bean="car"/> <ref bean="car2"/> <bean class="com.coslay.beans.Car"> <constructor-arg value="Ford"></constructor-arg> <constructor-arg value="Changan"></constructor-arg> <constructor-arg value="20000" type="double"></constructor-arg> </bean> </list> </property> </bean> <!-- 配置Map属性值 --> <bean id="newPerson" class="com.coslay.beans.collectioln.NewPerson"> <property name="name" value="Rose"></property> <property name="age" value="28"></property> <property name="cars"> <!-- 使用map节点的entry子节点配置Map类型的成员变量 --> <map> <entry key="AA" value-ref="car"></entry> <entry key="BB" value-ref="car2"></entry> </map> </property> </bean> <!-- 配置Properties属性值 --> <bean id="dataSource" class="com.coslay.beans.collectioln.DataSource"> <property name="properties"> <!-- 使用props和prop子节点来为Properties属性赋值 --> <props> <prop key="user">root</prop> <prop key="password">root</prop> <prop key="jsbcUrl">jdbc:mysql:///test</prop> <prop key="driverClass">com.mysql.jdbc.Driver</prop> </props> </property> </bean> <!-- 配置单例的bean。以供多个bean进行引用,须要导入util命名空间--> <util:list id="cars"> <ref bean="car"/> <ref bean="car2"/> </util:list> <bean id="person4" class="com.coslay.beans.collectioln.Person"> <property name="name" value="Jack"></property> <property name="age" value="29"></property> <property name="cars" ref="cars"></property> </bean> <!-- 通过p命名空间为bean的属性赋值。须要先导入p命名空间,相对于传统--> <bean id="person5" class="com.coslay.beans.collectioln.Person" p:age="30" p:name="Queen" p:cars-ref="cars"></bean> </beans>

转载于:https://www.cnblogs.com/ldxsuanfa/p/10913674.html

spring 配置属性细节相关推荐

  1. spring配置属性的两种方式

    spring配置属性有两种方式,第一种方式通过context命名空间中的property-placeholder标签 <context:property-placeholder location ...

  2. Spring Boot 属性配置你所不知道的细节

    今天我们要聊的这个问题,可能工作5年的资深程序员也不一定搞得很清楚,但是我敢保证在开发 Web 应用过程中大家都遇到过. 这个问题就是: Spring Boot 应用程序读取配置属性时,不同配置源的优 ...

  3. spring cloud ,spring boot application.properties 配置属性列表

    #横幅 banner.charset = UTF-8#横幅文件编码. banner.location = classpath:banner.txt#横幅文件位置. banner.image.locat ...

  4. Spring Cloud 覆写远端的配置属性

    覆写远端的配置属性 应用的配置源通常都是远端的Config Server服务器,默认情况下,本地的配置优先级低于远端配置仓库.如果想实现本地应用的系统变量和config文件覆盖远端仓库中的属性值,可以 ...

  5. Spring Boot 属性配置和使用

    spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot 系列 Spring Boot 入门 S ...

  6. spring boot通过命令行配置属性

    spring boot通过命令行配置属性 命令:java -jar xxx.jar --server.port=8888,通过使用–-server.port属性来设置xxx.jar应用的端口为8888 ...

  7. spring配置详解-属性注入(set方式)

    Spring当中属性注入,关键的部分了,Spring中的属性注入,这个属性注入其实也算配置,Spring中的属性注入,那Spring的属性注入呢,一共有三种方式,我今天感觉方式有点多,Spring注入 ...

  8. Spring配置中的bean直接引用其它bean的属性值

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! prin ...

  9. JSP如何获取Spring Boot的配置属性

    在Spring Boot + JSP的应用中,一般使用Session作为用户身份的认证, 有时候在JSP页面中需要读取配置在Spring Boot 的配置文件(比如application.proper ...

  10. Spring配置XML本地提示:点击eclipse属性——选择XML Catalog

    Spring配置XML本地提示:点击eclipse属性-->选择XML Catalog

最新文章

  1. 艾伟也谈项目管理,敏捷教练的工具箱
  2. R语言绘制带聚类树的堆叠柱形图
  3. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
  4. mysql blob 比较_MySQL下,text 、blob的比较
  5. python从socket做个websocket的聊天室server
  6. [css] ui设计中px、pt、ppi、dpi、dp、sp之间的关系?
  7. 让你的silverlight更炫(一):从自定义控件说起
  8. (四十九)java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案
  9. python学习之路-书籍推荐
  10. 怎样能让电脑干干净净的没有各种弹窗广告?
  11. Jenkins使用经验谈
  12. workstation服务丢失 共享打不开 0x80070035
  13. 广告行业中那些趣事系列25:腾讯2020广告大赛冠军解决方案带来的思考
  14. 2020科目一考试口诀_科目一口诀顺口溜2020
  15. Hive综合应用案例——用户学历查询
  16. 计算机前进后退灰的无法按,《微机试题2012新题.xls》-支持高清全文免费浏览-max文档...
  17. 2023电工杯数学建模B题思路模型
  18. 【Python】文件夹的基本操作
  19. PCB电路板3D模型3D渲染思路
  20. pytorch3d学习之pytorch3d.ops

热门文章

  1. 全面理解ThreadLocal
  2. Java 注解(Java Annotation)
  3. centos6 安装glibc-2.14.1
  4. Windows服务器配置fileZilla Server
  5. 关于jvm的OutOfMemory:PermGen space异常的解决
  6. (转) QImage总结
  7. 【web必知必会】—— 图解HTTP(转)good
  8. Ubuntu18.04 如何解决编译objective-c出现undefined reference to objc_get_class
  9. [Publish AAR To Maven] 使用GPG对文件进行签名加密
  10. [Java][Android][Process] 暴力的服务可以解决一切,暴力的方式执行命令行语句