博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的注入方式
阅读量:5338 次
发布时间:2019-06-15

本文共 4131 字,大约阅读时间需要 13 分钟。

1.1   属性依赖注入

l  依赖注入方式:手动装配 和 自动装配

l  手动装配:一般进行配置信息都采用手动

       基于xml装配:构造方法、setter方法

       基于注解装配:

l  自动装配:struts和spring 整合可以自动装配

       byType:按类型装配

       byName:按名称装配

       constructor构造装配,

       auto: 不确定装配。

1.1.1   构造方法

1.1.1.1         目标类

public class User {

   

    private Integer uid;

    private String username;

    private Integer age;

   

    public User(Integer uid, String username) {

        super();

        this.uid = uid;

        this.username = username;

    }

   

    public User(String username, Integer age) {

        super();

        this.username = username;

        this.age = age;

    }

   

 

1.1.1.2         spring配置

    <!-- 构造方法注入

        * <constructor-arg> 用于配置构造方法一个参数argument

            name :参数的名称

            value:设置普通数据

            ref:引用数据,一般是另一个bean id值

           

            index :参数的索引号,从0开始 。如果只有索引,匹配到了多个构造方法时,默认使用第一个。

            type :确定参数类型

        例如:使用名称name

            <constructor-arg name="username" value="jack"></constructor-arg>

            <constructor-arg name="age" value="18"></constructor-arg>

        例如2:【类型type 和  索引 index】

            <constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>

            <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>

    -->

    <bean id="userId" class="com.itheima.f_xml.a_constructor.User" >

        <constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>

        <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>

    </bean>

1.1.2   setter方法

<!-- setter方法注入

        * 普通数据

            <property name="" value="值">

            等效

            <property name="">

                <value>值

        * 引用数据

            <property name="" ref="另一个bean">

            等效

            <property name="">

                <ref bean="另一个bean"/>

   

    -->

    <bean id="personId" class="com.itheima.f_xml.b_setter.Person">

        <property name="pname" value="阳志"></property>

        <property name="age">

            <value>1234</value>

        </property>

       

        <property name="homeAddr" ref="homeAddrId"></property>

        <property name="companyAddr">

            <ref bean="companyAddrId"/>

        </property>

    </bean>

   

    <bean id="homeAddrId" class="com.itheima.f_xml.b_setter.Address">

        <property name="addr" value="阜南"></property>

        <property name="tel" value="911"></property>

    </bean>

    <bean id="companyAddrId" class="com.itheima.f_xml.b_setter.Address">

        <property name="addr" value="北京八宝山"></property>

        <property name="tel" value="120"></property>

    </bean>

 

1.1.3   P命令空间[了解]

l  对“setter方法注入”进行简化,替换<property name="属性名">,而是在

       <bean p:属性名="普通值"  p:属性名-ref="引用值">

l  p命名空间使用前提,必须添加命名空间

      

 

    <bean id="personId" class="com.itheima.f_xml.c_p.Person"

        p:pname="禹太璞" p:age="22"

        p:homeAddr-ref="homeAddrId" p:companyAddr-ref="companyAddrId">

    </bean>

   

    <bean id="homeAddrId" class="com.itheima.f_xml.c_p.Address"

        p:addr="DG" p:tel="东莞">

    </bean>

    <bean id="companyAddrId" class="com.itheima.f_xml.c_p.Address"

        p:addr="DG" p:tel="岛国">

    </bean>

 

1.1.4   SpEL[了解]

l  对<property>进行统一编程,所有的内容都使用value

       <property name="" value="#{表达式}">

       #{123}、#{'jack'} : 数字、字符串

       #{beanId}      :另一个bean引用

       #{beanId.propName}     :操作数据

       #{beanId.toString()}     :执行方法

       #{T(类).字段|方法}      :静态方法或字段

 

    <!--

        <property name="cname" value="#{'jack'}"></property>

        <property name="cname" value="#{customerId.cname.toUpperCase()}"></property>

            通过另一个bean,获得属性,调用的方法

        <property name="cname" value="#{customerId.cname?.toUpperCase()}"></property>

            ?.  如果对象不为null,将调用方法

    -->

    <bean id="customerId" class="com.itheima.f_xml.d_spel.Customer" >

        <property name="cname" value="#{customerId.cname?.toUpperCase()}"></property>

        <property name="pi" value="#{T(java.lang.Math).PI}"></property>

    </bean>

 

l  阅读:

      

1.1.5   集合注入

<!--

        集合的注入都是给<property>添加子标签

            数组:<array>

            List:<list>

            Set:<set>

            Map:<map> ,map存放k/v 键值对,使用<entry>描述

            Properties:<props>  <prop key=""></prop>  【】

           

        普通数据:<value>

        引用数据:<ref>

    -->

    <bean id="collDataId" class="com.itheima.f_xml.e_coll.CollData" >

        <property name="arrayData">

            <array>

                <value>DS</value>

                <value>DZD</value>

                <value>屌丝</value>

                <value>屌中屌</value>

            </array>

        </property>

       

        <property name="listData">

            <list>

                <value>于嵩楠</value>

                <value>曾卫</value>

                <value>杨煜</value>

                <value>曾小贤</value>

            </list>

        </property>

       

        <property name="setData">

            <set>

                <value>停封</value>

                <value>薄纸</value>

                <value>关系</value>

            </set>

        </property>

       

        <property name="mapData">

            <map>

                <entry key="jack" value="杰克"></entry>

                <entry>

                    <key><value>rose</value></key>

                    <value>肉丝</value>

                </entry>

            </map>

        </property>

       

        <property name="propsData">

            <props>

                <prop key="高富帅">嫐</prop>

                <prop key="白富美">嬲</prop>

                <prop key="男屌丝">挊</prop>

            </props>

        </property>

    </bean>

转载于:https://www.cnblogs.com/MrTanJunCai/p/9908161.html

你可能感兴趣的文章
Archiving(Chapter 10 of Cocoa Programming for Mac OS X)
查看>>
View Controllers(Chapter 7 of iOS Programming: The Big Nerd Ranch Guide)
查看>>
管理之道:教学相长--教亦学,学亦教
查看>>
获取当前文件路径和父级路径
查看>>
ubuntu上制作应用程序的快捷图标启动
查看>>
list遍历时删除元素
查看>>
python+selenium之验证码的处理
查看>>
Foundation框架 - NSException类
查看>>
MongoDB Shell 经常使用的操作
查看>>
POJ - 2991 Crane (段树+计算几何)
查看>>
XML学习笔记
查看>>
cacti气象图调整(批量位置调整、更改生成图大小等)
查看>>
多态应用-主人与宠物玩耍案例
查看>>
Python拼接两个TXT文件(遍历文件夹,去除重复记录)
查看>>
Jenkins+SVN+Maven+shell 自动化部署实践
查看>>
nginx and node.js配合使用 helloworld
查看>>
JavaScript--History 对象
查看>>
RabbitMQ各协议异同详解
查看>>
基于 Python 的性能测试工具 locust 与 LR 的简单对比[转发]
查看>>
Hanio汉诺塔代码递归实现
查看>>