spring配置文件详解

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

 

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- 通过无参构造创建对象 -->

<!--

一个bean代表一个实体类

id:自定义对象的唯一标识符使用getBean("id");方法获取对象

class:实体类全限定名

-->

<!-- bean 子节点可以有多个 -->

<bean id="teacher" class="com.bw.dto.Teacher">

<!-- 属性的数据注入 -->

<!-- 构造方法数据注入 -->

<!-- 1.根据构造方法参数索引索引从0开始 -->

<!-- 注入的数据类型要与构造方法参数类型匹配 -->

<constructor-arg index="0">

<value>110</value>

</constructor-arg>

<constructor-arg index="1">

<value>金腊梅</value>

</constructor-arg>

<constructor-arg index="2">

<value>30</value>

</constructor-arg>

 

<!-- 2.根据构造方法参数类型 -->

<constructor-arg type="java.lang.Integer">

<value>120</value>

</constructor-arg>

<constructor-arg type="java.lang.String">

<value>金宝宝</value>

</constructor-arg>

<constructor-arg type="java.lang.Integer">

<value>28</value>

</constructor-arg>

 

<!-- 1.基本类型数据的注入 -->

<!--

name:实体类的属性此处的name属性值跟实体类中属性名可以不一致建议一致

注意原因底层实现原理

spring实现属性赋值是根据:name属性值(name="xxx")在当前<bean/>中寻找匹配setXxx();的方法名实现并非匹配相应的实体类属性

1.xxx首字母大写xxx → Xxx

2.在前面增加set:xxx → Xxx  → setXxx()

3.依赖注入(赋值),<bean/>配置实体类中必须要有set方法

为属性赋值:value / ref

value:基本数据类型赋值为在栈内存中的内存赋值

ref:引用数据类型赋值为在堆内存中的内存赋值

-->

<property name="integer" value="1"></property>

<property name="tname" value="金腊梅"></property>

<property name="tage" value="30"></property>

<!-- 2.简单引用类型数据的注入 -->

<property name="student" ref="stu"></property>

<!-- 3.list集合数据的注入 -->

<!-- 注意如果属性限定了泛型那么必须同时在get,set方法也进行泛型限定否则对数据注入无效 -->

<property name="list">

 

<!--

List集合泛型的限定:<list value-type="">

value-type="":指定List集合元素(泛型)类型

value-type="com.bw.dto.Student"

-->

<list>

<!-- 第一个元素注入简单的数值 -->

<!-- 元素默认类型:type="java.lang.String" -->

<value>1</value>

<!-- 第二个元素注入引入一个对象已经在上下文配置的<bean id="" class=""/>对象 -->

<ref bean="stu"/>

<!-- 第三个元素注入注入一个对象可以同时进行实例化 -->

<!-- 注意要么不注入某一个属性默认为null;如果注入就要保证数据完整性否则加载会报错 -->

<bean class="com.bw.dto.Student">

<property name="sid" value="1001"></property>

<property name="sname" value="任博文"></property>

<property name="age" value="30"></property>

</bean>

<!-- 第四个元素注入双精度小数 -->

<!-- 手动指定注入元素数据类型:type="java.lang.Double" -->

<value type="java.lang.Double">333.3333</value>

</list>

</property>

<!-- 4.map映射数据的注入类似List -->

<property name="map">

<!--

map映射键-值对泛型的限定:<map key-type="" value-type="">

key-type="":指定map映射""(泛型)类型

value-type="":指定map映射""(泛型)类型

-->

<map>

<!--

key:键注入基本数据类型

value:值注入基本数据类型

key-ref:键注入引用数据类型

value-ref:值注入引用数据类型

key/value-ref:引入一个对象已经在上下文配置的<bean id="" class=""/>对象

-->

<!-- 第一个"-"注入 -->

<entry key="key1" value="北京"></entry>

<!-- 第二个"-"注入 -->

<entry key="key2" value-ref="stu"></entry>

<!-- 第三个"-"注入 -->

<!-- 为值注入一个对象可以同时进行实例化 -->

<entry key="key3">

<bean class="com.bw.dto.Student">

<property name="sid" value="1002"></property>

<property name="sname" value="西厂白公公"></property>

<property name="age" value="40"></property>

</bean>

</entry>

<!-- 第四个"-"注入 -->

<entry key-ref="stu" value-ref="stu2"></entry>

<!-- 第五个"-"注入 -->

<entry>

<!-- 为键注入一个对象可以引入也可以同时进行实例化 -->

<key>

<ref bean="stu"/>

</key>

<!-- 为值注入基本数据类型默认为java.lang.String,可以手动指定数据类型 -->

<value type="java.lang.Integer">1002</value>

</entry>

</map>

</property>

<!-- 5.Properties属性集数据的注入 -->

<!--

Properties类表示了一个持久的属性集

底层是基于键-值对结构存储数据要求键和值必须全部为java.lang.String类型

Properties类继承了Hashtable<Object,Object>所以可对Properties对象应用putputAll方法

但不建议使用这两种方法因为他们允许键和值插入不是String类型的值

相反应该使用setProperty方法如果在"有危险" Properties 对象即包含非 String 的键或值上调

 store  save 方法则该调用将失败

1. Properties()

         创建一个无默认值的空属性列表

2. Properties(Properties defaults)

         创建一个带有指定默认值的空属性列表

4. Object setProperty(String key, String value)

调用 Hashtableput()方法

5. String getProperty(String key)

用指定的键在此属性列表中搜索属性

6. String getProperty(String key, String defaultValue)

用指定的键在属性列表中搜索属性

7. void load(InputStream inStream)

从输入流中读取属性列表键和元素对

8. void store(OutputStream out, String comments)

以适合使用 load 方法加载到 Properties 表中的格式将此 Properties 表中的属性列表键和元素对写入输出流

-->

<property name="properties">

<props>

<prop key="1001">人事部</prop>

<prop key="1002">企划部</prop>

<prop key="1003">销售部</prop>

</props>

</property>

</bean>

<bean id="stu" class="com.bw.dto.Student">

<property name="sid" value="1"></property>

<property name="sname" value="白伟东"></property>

</bean>

<bean id="stu2" class="com.bw.dto.Student">

<property name="sid" value="2"></property>

<property name="sname" value="任博文"></property>

</bean>

<!--

name:别名目标对象对应id属性

alias(别名):支持中文

-->

<!--【注意为对象起别名本质上还是同一个对象同一个栈值不再调用无参构造器即不会再创建对象 -->

<alias name="teacher" alias="th"/>

<!-- 配置静态工厂创建对象 -->

<!--

factory-method:配置工厂类中静态方法工厂类中若包含了很多静态方法可选配置工厂类中具体静态方法属性值:方法名

   【注意本质上这里是使用.静态方法来创建返回一个Teacher类对象(teacher1)

       工厂类调用静态方法:Teacher teacher1 = SpringFactory.getTeacher();

-->

<bean id="teacher1" factory-method="getTeacher" class="com.bw.dto.SpringFactory"></bean>

<!-- 配置简单工厂创建对象 -->

<!--

区别与静态工厂不同此处不能配置factory-method属性

理由因为factory-method属性用来配置静态方法而简单工厂不使用(.静态方法)创建Teacher类对象

而是先创建一个工厂对象再由工厂对象创建实体类Teacher类对象

-->

<!-- 【注意本质上这里此时只是创建了一个工厂类对象(normalFactory),并非Teacher类对象 -->

<bean id="normalFactory" class="com.bw.dto.SpringFactory"></bean>

<!--

id:Teacher类对象

factory-bean:引用简单工厂类对象

 -->

 <!--【注意这里此时才会利用上面的创建的简单工厂类对象(normalFactory)来创建一个Teacher类对象 -->

<bean id="teacher2" class="com.bw.dto.Teacher" factory-bean="normalFactory"></bean>

 

</ beans >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值