Spring-04--Spring属性配置细节

来源:互联网 发布:抓娃娃机 知乎 编辑:程序博客网 时间:2024/05/22 00:48
本人初学Spring框架,新手一个,菜鸟一个。写这类文章并非炫耀知识,我也没能力炫耀,
只是作为本人的习总结、当笔记用。希望各位前辈看到了我总结有错的地方可以多多指
,如果是对大家有帮助的,也希望大家可以赏脸浏览;

-------------------------------------------------------------------------------------------------------------------
今天开始学习配置Bean,分为几个小节来完成(学习的内容为红色字体的内容)
内容提要
配置Bean
--配置形式:基于XML文件的方式;基于注解的方式;
--Bean的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法&实例工厂方法)、FactoryBean
--IOC容器 BeanFactory&ApplicationContext概述
--依赖注入的方式:属性注入、构造器注入
--注入属性值的细节
--自动转配
--Bean 之间的关系:继承、依赖
--Bean 的作用域:singleton、prototype、WEB 环境作用域
-- 使用外部属性文件
--spEL
--IOC 容器中Bean的生命周期
--Spring 4.x新特性:泛型依赖注入
-------------------------------------------------------------------------------------------------------------------
--注入属性值的细节
--<value></value>子节点
我们在为属性设置value值时,可以采用两种方式,第一种是在<property></property>标签或者<constructor-arg></constructor-arg>标签中设置value属性;
<property name="name" value="Spring 4"></property>
<constructor-arg value="Spring 4" index="0"></constructor-arg>
另外一种则是在<property></property>标签或者<constructor-arg></constructor-arg>标签里面设置<value></value>子节点;
--<![CDATA[ ]]>
当为属性设置value值时如果属性值包含了特殊字符,可以使用<![CDATA[ ]]>包裹起来
<constructor-arg index="1"><value><![CDATA[<ShangHai^>]]></value></constructor-arg>
--引用其他的Bean
我们有时候在定义变量时,有可能会需要用到类变量,例如,有一个Person类又有一个Car类,Person类中有name、age等基本变量,还有一个Car类型的变量car,那么,我们要怎么样才能为该Car变量赋值呢?这就需要我们用到另外一个知识点,引用其他的Bean,引用其他的Bean又分为两种,引用外部Bean还有引用内部Bean
--引用外部Bean(可以被任何Bean引用)
引用外部Bean从字面上来看无非就是在一个<Bean></Bean>中引入这个<Bean></Bean>之外的一<Bean></Bean>,其中,我们利用“ref“属性标识我们需要引入的外部Bean的id;(我们以上述Person还有Car这两个类为例)
<bean id="car" class="com.ioc.demo.Car"><constructor-arg value="AuDi" index="0"></constructor-arg><!-- 如果字面值包含特殊字符,可以使用<![CDATA[ ]]>包裹起来 --><constructor-arg index="1"><value><![CDATA[<ShangHai^>]]></value></constructor-arg><constructor-arg index="2"><value>600000</value></constructor-arg></bean>
<!-- 引用外部Bean <bean id="person" class="com.ioc.demo.Person"><property name="name" value="张三"></property><property name="age" value="25"></property>
<property name="car" ref="car"></property></bean>-->
--引用内部Bean(不能被外部Bean引用,所以不需要设置name或者id属性)
引用内部Bean指的是,在我们利用<property></property>进行属性注入或者是利用<constructor
-arg></constructor-arg>进行构造注入时,可以利用在<property>或者<constructor>里面创建<Bean>
的做法,来为我们的类变量进行赋值;
但是需要清楚的是,在我们使用<property></property>标签进行属性注入时,其<Bean>中Class
属性指明的类中,必须要有一个无参的构造方法还有为要注入的相应属性提供对应的setter方法;而我们使
<constructor></constructor>标签进行构造器注入时,其<Bean>中Class属性指明的类中,必须要有
一个带有相应参数的构造方法;
<bean id="person3" class="com.ioc.demo.Person"><constructor-arg value="李四" index="0"></constructor-arg><constructor-arg value="10" index="1"></constructor-arg><constructor-arg index="2" type="com.ioc.demo.Car"><bean class="com.ioc.demo.Car"><property name="brand" value="红旗"></property><property name="city" value="北京"></property><property name="price" value="200000"></property></bean></constructor-arg></bean><bean id="person2" class="com.ioc.demo.Person"><property name="name" value="李四"></property><property name="age" value="10"></property><property name="car"><bean class="com.ioc.demo.Car"><!-- <constructor-arg value="红旗" index="0"></constructor-arg><constructor-arg value="北京" index="1"></constructor-arg><constructor-arg value="2000000" index="2"></constructor-arg>  --><property name="brand" value="红旗"></property><property name="city" value="北京"></property><property name="price" value="200000"></property></bean></property></bean>
--为属性设置null值
当我们需要将一个属性的值设置为null时,可以使用<null/>标签进行设置,也可以直接不对该属性进行设
,但是需要明白并不是所有类型的属性都可以设置null值的,例如int、double等基本数据类型。
<constructor-arg value="AuDi" index="0"></constructor-arg><constructor-arg type="java.lang.String"><null/></constructor-arg><constructor-arg value="240" type="int"></constructor-arg>
--为级联属性赋值
为级联属性赋值一般很少用,意思就是当我们在一个类中定义了一个类变量时,例如在Person类中定义了
Car类变量时,我们可以在 引入Bean的同时为Car类里面的变量进行赋值,例如下面的配置中,我们并无在为
Car配置Bean时对Car类的变量maxSpeed进行赋值,而是在对Person类配置Bean时通过为级联属性赋值的方式
为Car类的maxSpeed变量进行赋值。(就是car.maxSpeed语句
注意,Spring采用级联属性进行赋值有两个要求
*属性需要先进行初始化后才能对其下一级属性进行级联赋值
(Person类中的Car属性要先进行初始化,才能为Car属性的下一级属性maxSpeed属性赋值)
*要对其进行赋值的属性必须实现setter方法
<bean id="car" class="com.ioc.demo.Car"><constructor-arg value="AuDi" index="0"></constructor-arg><constructor-arg index="1"><value><![CDATA[<ShangHai^>]]></value></constructor-arg><constructor-arg index="2"><value>6000</value></constructor-arg></bean>
<bean id="person" class="com.ioc.demo.Person"><property name="name" value="张三"></property><property name="age" value="25"></property><property name="car" ref="car"></property><property name="car.maxSpeed" value="250"></property></bean>
--利用List节点为类型为List的属性赋值
当我们定义的变量中,有多个变量的类型相同时,就会采用数组或者集合来存储,就比如,一个人不单单只
有一辆车,可能有多辆,所以我们会在Person类中定义多个Car类型的变量,并且存在List当中。那么,我们又该
怎样为这些类型为数组类型或者集合类型的属性进行注入呢,因为,数组类型还有List类型还有Set类型的注入操
作都是差不多的,所以在此我们只演示一下List类型的操作
<bean id="car" class="com.ioc.demo.Car"><constructor-arg value="AuDi" index="0"></constructor-arg><constructor-arg index="1"><value><![CDATA[<ShangHai^>]]></value></constructor-arg><constructor-arg index="2"><value>6000</value></constructor-arg></bean><bean id="car2" class="com.ioc.demo.Car"><constructor-arg value="AuDi" index="0"></constructor-arg><constructor-arg type="java.lang.String"><null/></constructor-arg><constructor-arg value="240" type="int"></constructor-arg></bean>
<bean id="person3" class="com.ioc.demo.list.Person"><property name="name" value="王五"></property><property name="age" value="60"></property><property name="cars"><list><ref bean="car"/><!-- 引用外部Bean --><ref bean="car2"/><!-- 引用外部Bean --><bean class="com.ioc.demo.Car"><!-- 引用内部Bean --><property name="brand" value="BYD"></property><property name="city" value="ShenZhen"></property><property name="price" value="5000000"></property></bean></list></property></bean>
--利用Map节点为类型为Map的属性赋值
利用Map节点为Map类型的属性赋值跟其他类型的有点区别,我们使用<map></map>标签来为类型为
map的变量进行注入,<map></map>标签里面可以使用多个<entry></entry>作为子标签,每个<entry>
</entry>子标签都包含一个键和一个值
key用于作为键,value-ref用于指明类变量的指,注意,是类变量,要是普通变量用value就可以了
<bean id="newPerson" class="com.ioc.demo.list.NewPerson"><property name="name" value="赵六"></property><property name="age" value="20"></property><property name="cars"><map><entry key="AA" value-ref="car"></entry><entry key="BB" value-ref="car2"></entry></map></property></bean>
--利用Properties节点为类型为Properties的属性赋值
当我们在使用数据库的时候会进行数据库的链接操作,那么使用properties文件的形式来填写连接数据库要
输入的数据时就很方便了,我们使用<props></props>标签定义Properties,该标签使用多个<prop>子标签以
键值对的形式存入信息,然后根据键抽取我们需要的信息,(例如我们演示要连接mysql所要填写的数据)
<bean id="dataSourse" class="com.ioc.demo.list.DataSourse"><property name="properties"><props><prop key="user">root</prop><prop key="passWord">123456</prop><prop key="jdbcUrl">jdbc:mysql://test</prop><prop key="driverClass">com.mysql.jdbc.Driver</prop></props></property></bean>
关于源码:
本次的内容是Spring-04这个项目,文章前面的Spring-(数字)前缀代表的就是源码的项目名称,
以后的源码都会通过这个方式分享出来,
谢谢
http://pan.baidu.com/s/1pLsagT9



0 0