Spring基础学习(二)—注入参数详解

     在Spring配置文件中,用户不但可以将String、int等字面值注入Bean中,还可以将集合、Map等类型注入Bean中,此外还可以注入配置文件中其他定义的Bean。

一、字面值

     (1)可用字符串表示的值,可以通过<value>元素标签或value属性进行注入。

     (2)基本数据类型及其封装类、Stting类型都可以采用字面值注入的方式。

     (3)若字面值包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来。

<bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" >
            <value><![CDATA[BMW&x5]]></value>
        </property>
        <property name="color" value="Black"/>
        <property name="price" value="800000"/>
        <property name="maxSpeed" value="200"/>
    </bean>

     由于brand属性包含了一个XML的特殊符号,因此特意在属性值外添加一个XML特殊处理标签<![CDATA[]]>,这个标签的作用就是让XML解析器将标签中的字符串当作普通文本对待,以防止某些字符对XML格式造成破坏。

 

二、引用其他Bean

     (1)要使Bean能相互访问,就必须在Bean的配置文件中指定对Bean的引用。

     (2)在Bean的配置文件中,可以通过<ref>属性或元素配置。

     (3)也可以在属性内部包含Bean的声明,这样的Bean称为内部Bean。

     (4)内部Bean不能被外部使用。

Person.java

public class Person{

	private String name;
	private int age;
	private Car car;

	@Override
	public String toString(){
		return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
	}

	//省略get set...
}

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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW"/>
        <property name="color" value="Black"/>
        <property name="price" value="800000"/>
        <property name="maxSpeed" value="200"/>
    </bean>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom"/>
        <property name="age" value="26"/>

        <!-- 使用ref属性建立bean之间的引用关系 -->
        <property name="car" ref="car"/>

    </bean>

</beans>

Test.java

	@Test
	public void testCar(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person = (Person)context.getBean("person");
		System.out.println(person);
	}

结果:

     Person [name=Tom, age=26, car=Car [brand=BMW, color=Black, price=800000.0, maxSpeed=200]]

     如果不引用外部的Bean,可以在内部声明一个内部Bean,这个内部Bean不能被其他外部Bean引用。

<?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.xsd">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW" />
        <property name="color" value="Black" />
        <property name="price" value="800000" />
        <property name="maxSpeed" value="200" />
    </bean>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom" />
        <property name="age" value="26" />

        <!-- 定义一个内部bean,内部bean外面不能引用 -->
        <property name="car">
            <bean class="com.kiwi.domain.Car">
                <property name="brand" value="Audi" />
                <property name="color" value="Black" />
                <property name="price" value="300000" />
                <property name="maxSpeed" value="250" />
            </bean>
        </property>

    </bean>

</beans>

结果:

     Person [name=Tom, age=26, car=Car [brand=Audi, color=Black, price=300000.0, maxSpeed=250]]

    也可以为级联属性赋值。

<?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.xsd">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW" />
        <property name="color" value="Black" />
        <property name="price" value="800000" />
        <property name="maxSpeed" value="200" />
    </bean>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom" />
        <property name="age" value="26" />
        <property name="car" ref="car"/>
        <!-- 为级联属性赋值,前提是属性先初始化然后才可以为其级联属性赋值 -->
        <property name="car.maxSpeed" value="250"/>

    </bean>

</beans>

结果:

     Person [name=Tom, age=26, car=Car [brand=BMW, color=Black, price=800000.0, maxSpeed=250]]

 

三、集合属性

1.List和Set

(1)配置List需要指定<list>标签,标签里包含一些元素,这些元素可以通过<value>指定简单的常量值,也可以使用<ref>指定对其他Bean的引用。

(2)配置set需要使用<set>标签,其他属性和List一样。

Person.java

public class Person{

	private String name;
	private int age;
	private List<Car> cars;

	//省略get set...
}

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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW" />
        <property name="color" value="Black" />
        <property name="price" value="800000" />
        <property name="maxSpeed" value="300" />
    </bean>

    <bean id="car2" class="com.kiwi.domain.Car">
        <property name="brand" value="Audi" />
        <property name="color" value="Black" />
        <property name="price" value="400000" />
        <property name="maxSpeed" value="250" />
    </bean>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom" />
        <property name="age" value="26" />
        <!-- 配置集合属性List -->
        <property name="cars">

            <list>
                <ref bean="car"/>
                <ref bean="car2"/>
            </list>

        </property>
    </bean>

</beans>

结果:

      Person [name=Tom, age=26, cars=[Car [brand=BMW, color=Black, price=800000.0, maxSpeed=300], Car [brand=Audi, color=Black, price=400000.0, maxSpeed=250]]]

 

2.Map

(1)通过<map>标签定义,子标签使用<entry>标签。

(2)在<entry>标签里可以使用key、key-ref、value、value-ref属性。

Person.java

public class Person{

	private String name;
	private int age;

	private Map<String,Car> cars;

	//省略get set...
}

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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW" />
        <property name="color" value="Black" />
        <property name="price" value="800000" />
        <property name="maxSpeed" value="300" />
    </bean>

    <bean id="car2" class="com.kiwi.domain.Car">
        <property name="brand" value="Audi" />
        <property name="color" value="Black" />
        <property name="price" value="400000" />
        <property name="maxSpeed" value="250" />
    </bean>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom" />
        <property name="age" value="26" />

        <!-- 配置集合属性Map -->
        <property name="cars">
            <map>
                <entry key="1" value-ref="car"/>
                <entry key="2" value-ref="car2"/>
            </map>
        </property>
    </bean>

</beans>

结果:

      Person [name=Tom, age=26, cars={1=Car [brand=BMW, color=Black, price=800000.0, maxSpeed=300], 2=Car [brand=Audi, color=Black, price=400000.0, maxSpeed=250]}]

 

3.Properties

    Properties类型可以看作Map类型的特例,Map元素的键和值可以是任何类型的对象,而Properties的键和值只能是字符串。

Boss.java

public class Boss{

	private Properties mails;

	@Override
	public String toString(){
		return "Boss [mails=" + mails + "]";
	}

	public Properties getMails(){
		return mails;
	}

	public void setMails(Properties mails){
		this.mails = mails;
	}
}

applicationContext.xml

<bean name="boss" class="com.kiwi.domain.Boss">
        <property name="mails">
            <props>
                <prop key="jobMail">[email protected]</prop>
                <prop key="lifeMail">[email protected]</prop>
            </props>
        </property>
    </bean>

结果:

      Boss [mails={[email protected], [email protected]}]

 

4.配置集合类型的Bean

(1)使用基本集合标签定义集合时,不能将集合作为独立的Bean定义,导致其他Bean无法引用该集合,所以无法在不同Bean直接共享集合。

(2)如果希望配置一个集合类型的Bean,而非一个集合类型的属性,则可以通过util命名空间进行配置。

(3)必须先引用util命名空间才能使用。

<?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"
    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">

    <bean id="car" class="com.kiwi.domain.Car">
        <property name="brand" value="BMW" />
        <property name="color" value="Black" />
        <property name="price" value="800000" />
        <property name="maxSpeed" value="300" />
    </bean>

    <bean id="car2" class="com.kiwi.domain.Car">
        <property name="brand" value="Audi" />
        <property name="color" value="Black" />
        <property name="price" value="400000" />
        <property name="maxSpeed" value="250" />
    </bean>

    <!-- 定义一个公共的Map其他Bean能够直接引用它 -->
    <util:map id="cars">
        <entry key="1" value-ref="car"/>
        <entry key="2" value-ref="car2"/>
    </util:map>

    <bean id="person" class="com.kiwi.domain.Person">
        <property name="name" value="Tom" />
        <property name="age" value="26" />
        <!-- 引用公共的Map -->
        <property name="cars" ref="cars"/>
    </bean>

</beans>
时间: 2024-08-04 06:31:08

Spring基础学习(二)—注入参数详解的相关文章

spring中Bean的注入参数详解

字面值    一般指可用字符串表示的值,这些值可以通过<value>元素标签进行注入.在默认情况下,基本数据类型及其封装类.String等类型都可以采取字面值注入的方式,Spring容器在内部为字面值提供了编辑器,它可以将以字符串表示的字面值转换为内部变量的相应类型.    配置信息:    <bean id="car" class="com.luxl.domain.Car">        <property name="m

java基础学习——4、集合类详解

一.Java集合框架图 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等. 发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法. 它的一个子接口Lin

MyBaties学习记录Settings参数详解

配置文件详解: Settings的参数和取值:

监控服务器Nagios之二 配置参数详解

    本篇主要介绍下安装完Nagios服务端后的配置目录及文件参数的解释,可供大家备忘! 首先解释下安装Nagios的时候make的含义如下: make all  //安装所有主程序 make install //来安装主程序,CGI和HTML文件 make install-init //在/etc/rc.d/init.d安装启动脚本 make install-config //来安装示例配置文件,安装的路径是/usr/local/nagios/etc make install-command

[转]Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法

首先我们来看一下什么是OpenSessionInView?    在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常. 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓

Spring batch学习 持久化表结构详解(2)

#接上一篇 这一篇讲一下持久化需要表 batch_job_execution, batch_job_execution_context, batch_job_execution_params, batch_job_execution_seq, batch_job_instance, batch_job_seq, batch_step_execution, batch_step_execution_context, batch_step_execution_seq _seq结尾的三张表,维护bat

Spring事务管理--(二)嵌套事物详解

一.前言 最近开发程序的时候,出现数据库自增id跳数字情况,无奈之下dba遍查操作日志,没有delete记录.才开始慢慢来查询事物问题.多久以来欠下的账,今天该还给spring事物. 希望大家有所收获.2016年07月19日22:32:38 二.spring嵌套事物 1.展示项目代码--简单测springboot项目 整体项目就这么简单,为了方便.这里就只有biz层与service层,主要作为两层嵌套,大家只要看看大概就ok.后面会给出git项目地址,下载下来看一看就明白,力求最简单. 下面我们

构建高可用服务器之二 Keepalive参数详解

keepalived有三类配置区域,注意不是三种配置文件,是一个配置文件里面三种不同类别的配置区域,全局配置(Global Configuration).VRRPD配置.LVS配置 ! Configuration File for keepalived ################################全局配置######################################### global_defs {    notification_email {        

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay