时间:2017-1-31 23:38

——Bean的属性注入方式

有三种注入方式:
    1)接口注入:
        定义一个接口,定义setName(String name)方法,定义一个类,实现该接口,并提供private String name。

    2)构造器注入:
        定义一个类,声明一个private String name,通过构造器this.name = name;进行注入。
        在配置文件中使用<constructor-arg>标签。

    3)通过set方法注入:
        在类中声明成员变量,并且提供set()方法。
        在配置文件中使用<property>标签。
        这种注入方式最常用。

——构造器注入

在配置文件中使用<constructor-arg>标签进行设置。

该标签有五个属性:
    *   name:表示属性名称
    *   value:表示属性值
    *   index:表示构造器参数的索引
    *   type:表示属性的类型,例如:java.lang.String
    *   ref:表示引用对象

示例代码:

    <bean id="car" class="com.wyc.spring3.demo5.Car">
        <!-- 使用name进行注入 -->
        <constructor-arg name="name" value="宝马"/>
        <constructor-arg name="price" value="300000"/>
        <!-- 使用索引进行注入 -->
        <constructor-arg index="0" type="java.lang.String" value="奔驰"/>
        <constructor-arg index="1" type="java.lang.Double" value="500000"/>
    </bean>

——set方法注入

在类中提供局部成员变量,并且提供set方法。

在配置文件中使用<property>标签。

<property>标签中有三个属性:
    *   name:表示属性的名称
    *   value:表示普通属性的值
    *   ref:表示引用对象

示例代码:

    <bean id="car2" class="com.wyc.spring3.demo5.Car2">
        <!-- name表示属性名称,value表示普通属性的值,ref表示引用的是一个对象 -->
        <property name="name" value="保时捷" />
        <property name="price" value="800000" />
    </bean>

——set方法注入对象属性

需要使用<property>标签中的ref属性,属性的值是其它Bean的id或name。

示例代码:

    <bean id="person" class="com.wyc.spring3.demo5.Person">
        <property name="name" value="张三" />
        <property name="car2" ref="car2" />
    </bean>

——名称空间p

为了简化XML文件配置,Spring2.5开始引入一个新的p名称空间。

使用方法:
    1)在<beans>标签中添加:xmlns:p="http://www.springframework.org/schema/p"
    2)p:<属性名>="xxx" 引入普通变量值
    3)p:<属性名>-ref="xxx" 引入其他Bean对象

示例代码:
    <bean id="car2" class="com.wyc.spring3.demo5.Car2" p:name="保时捷" p:price="2000000" />
    <bean id="person" class="com.wyc.spring3.demo5.Person" p:name="李四" p:car2-ref="car2"/>

——SpEL属性注入

Spring3.0开始提供的表达式语言。

语法:
    #{表达式}
    <bean id="" value="#{表达式}" />
    1)直接使用字符串常量
        #{'哈哈哈'}

    2)使用另一个Bean对象
        #{person} // 根据其他bean标签的id属性获取

    3)使用指定对象的属性
        #{person.name}

    4)使用方法的返回值作为属性
        #{person.showName()} // 会将showName()方法的返回值作为value的值

    5)使用静态字段或方法
        #{T(java.lang.Math).PI}

示例代码:

    <bean id="car2" class="com.wyc.spring3.demo5.Car2">
        <property name="name" value="#{'大众'}" />
        <property name="price" value="#{'200000'}" />
    </bean>
 
    <bean id="person" class="com.wyc.spring3.demo5.Person">
        <property name="name" value="#{personInfo.name}" />
        <property name="car2" value="#{car2}"/>
    </bean>
 
    <bean id="personInfo" class="com.wyc.spring3.demo5.PersonInfo" >
        <property name="name" value="赵六"></property>
    </bean>

——集合属性的注入

示例代码:

public class CollectionBean {
    private List<String> list;
    private Set<String> set;
    private Map<String, String> map;
    // 继承自HashTable
    private Properties properties;
    private String[] array;
 
    public Properties getProperties() {
        return properties;
    }
 
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
 
    public Map<String, String> getMap() {
        return map;
    }
 
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
 
    public Set<String> getSet() {
        return set;
    }
 
    public void setSet(Set<String> set) {
        this.set = set;
    }
 
    public List<String> getList() {
        return list;
    }
 
    public void setList(List<String> list) {
        this.list = list;
    }
 
    @Override
    public String toString() {
        return "CollectionBean [list=" + list + ", set=" + set + ", map=" + map + ", properties=" + properties + ", array=" + Arrays.toString(array) + "]";
    }
 
    public String[] getArray() {
        return array;
    }
 
    public void setArray(String[] array) {
        this.array = array;
    }
}

---------------------------------------------------------------------------------------------------------------------------- 

配置文件:

<bean id="collectionBean" class="com.wyc.spring3.demo6.CollectionBean">
    <!-- 注入List集合 -->
    <property name="list">
        <list>
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
            <value>赵六</value>
            <!-- <ref></ref> -->
        </list>
    </property>
 
    <!-- 注入set集合 -->
    <property name="set">
        <set>
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
            <value>赵六</value>
        </set>
    </property>
 
    <!-- 注入map集合 -->
    <property name="map">
        <map>
            <entry key="1" value="张三"></entry>
            <entry key="2" value="李四"></entry>
            <entry key="3" value="王五"></entry>
            <entry key="4" value="赵六"></entry>
        </map>
    </property>
 
    <!-- 注入properties属性 -->
    <property name="properties">
        <props>
            <prop key="username">张三</prop>
            <prop key="password">123456</prop>
        </props>
    </property>
 
    <!-- 注入数组 -->
    <property name="array">
        <array>
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
            <value>赵六</value>
        </array>
    </property>
</bean>

——总结

IoC装配Bean(XML)
    *   语法:
        >   <bean id="" class="" />
        >   id:满足XML的id约束语法,id不能重复,不能存在特殊字符
        >   name:可以重复,可以存在特殊字符
        >   如果只配置name,那么就可以将name的值作为id。

    *   配置Bean的其他属性
        >   init-method
            初始化方法。
        >   destroy-method
            销毁方法。
        >   scope
            singleton:单例
            prototype:多例

    *   DI注入属性:
        >   普通属性
            <property name="属性名" value="属性值" />
        >   引用属性
            <property name="属性名" ref="其他类的id或name" />
    *   集合属性的注入

Spring之属性注入的更多相关文章

  1. Spring的属性注入, byName和byType还有注入List属性

    昨天花了一晚上的时间又仔细研究了一下Spring的属性注入, 一个新的方法: 自动装载和autowire, 不过因为又想起来老师说不常用, 感觉这一晚上的时间有点亏, 还是自己太愚钝了, 反应太慢 先 ...

  2. SpringBoot之Spring@Value属性注入使用详解

    在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性.在日常使用中我们常用的功能都比较简单,本篇文章系统的带大家来了解一下@Va ...

  3. 【Spring 2】spring的属性注入形式

    一.注入简介 spring是一个java bean的容器,它摒弃了过去通过new关键字调用类再调用类的实例的形式,通过依赖注入维护者一系列的java  bean的示例.通过spring所提供的依赖注入 ...

  4. Spring中属性注入的几种方式以及复杂属性的注入

    在Spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.P ...

  5. Spring入门-----------------属性注入和对象注入

    属性注入即通过setter方法注入bean的属性或依赖对象. 属性注入使用<property>元素,使用name属性指定bean的属性的名称,value属性或<value>子节 ...

  6. spring的属性注入和构造器注入

    spring在向IOC容器中注入Bean的时候,有三种注入方式: 属性注入构造器注入工厂方法注入平常中用到的前两种方法较多,下面对前两种方法举例.一.属性注入1.创建一个car类,作为注入的bean ...

  7. Spring中属性注入的几种方式以及复杂属性的注入详解

    在spring框架中,属性的注入我们有多种方式,我们可以通过set方法注入,可以通过构造方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List.Map.Prope ...

  8. Spring静态属性注入

    今天遇到一个工具类,需要静态注入一个属性,方法如下: 第一步:属性的set和get方法不要加static package cn.com.chinalife.ebusiness.common.util; ...

  9. 【Spring】---属性注入

    一.Spring注入属性(有参构造和[set方法]) 注意:在Spring框架中只支持set方法.有参构造方法这两种方法. 使用有参数构造方法注入属性(用的不多,但需要知道): 实体类 package ...

随机推荐

  1. Kubernetes部署-RKE自动化部署

    一.简介 RKE:Rancher Kubernetes Engine 一个极其简单,闪电般快速的Kubernetes安装程序,可在任何地方使用. 二.准备工作 I.配置系统 系统:CentOS 7 / ...

  2. java并发编程基础—生命周期与线程控制

    一.线程生命周期 线程被创建启动以后,他既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Bloc ...

  3. 达梦数据库(DM8)大规模并行集群MPP 2节点安装部署

    达梦数据库大规模并行集群MPP 2节点安装部署   1.环境准备   os 数据库版本 ip mpp角色 centos7.x86 DM8 192.168.30.100 mpp1 centos7.x86 ...

  4. gitbook导出markdown文件为pdf格式

    前言本人想完成如题所示的操作,可是兜兜转转在网上搜了好久,不是Linux下的教程就是mac OS下的教程,而且一大堆windows的教程能够说明白的寥寥无几,本着分享的态度,鄙人今天特整理教程如下: ...

  5. Linux + NodeJS 常用命令

    Linux系统常用命令 1.su 由当前用户切换至root用户: 2. su username 切换至某一用户: 3.chmod u+w /etc/sudoers 为/etc/sudoers文件添加写 ...

  6. SSRF漏洞入门篇

    SSRF漏洞,又名服务端请求伪造漏洞. PHP中下列函数使用不当会导致SSRF: file_get_contents().fsockopen().curl_exec()函数(源码审计的时候注意点儿): ...

  7. Chrome添加 测试设备 手机iPhone x系列手机

    一.F12,点击下图中的Edit,添加设备 二.添加名为iPhone XR的设备,设备配置如下 三.其中User agent string如下 Mozilla/5.0 (iPhone; CPU iPh ...

  8. weex打包android apk采坑之旅(windows)

    1. npm install weex-toolkit -g 后weex命令不起作用 ,解决办法把weex.cmd所在的目录添加到环境变量PATH 2.weex命令每次报找不到文件'C:\Progra ...

  9. 零基础涂鸦智能面板SDK开发记录(一)

    前言 本人基础背景:在学校学了点JS,在blbl上看过几节node.js视频,现在是一名Android开发工程师,因公司需要学习涂鸦面板SDK开发.说真的除了官方的一些文档外,我真的找不到其他的资料. ...

  10. Android技术分享| 实现视频连麦直播

    视频连麦产品端核心步骤分析 游客申请连麦/取消申请 主播同意/拒绝申请 音视频发布取消 支持很多观众观看 支持多人连麦 低延时 IM 弹幕 视频连麦技术端调研 emmm,大致可以分为视频采集.编码,传 ...