【Spring】依赖注入

作者: 大数据阶梯之路 | 来源:发表于2019-01-30 18:55 被阅读1次

    有关依赖注入的学习,昨天在这篇文章中已经谈到了aop的前置增强和后置增强以及IoC的设值注入,不明白的朋友们可以点击链接跳到此篇去学习下,有代码示例。而此篇是来扩展学习下springIoC的其他注入方式以及注入的不同数据类型的标签使用

    一、IoC扩展

    1、构造注入用法,即spring通过构造方法来赋值。在上面提到的那篇文章中使用的设值注入是Spring通过JavaBean的无参构造方法实例化对象。当我们在程序中编写了有参构造方法时,JVM就不会再提供默认的无参构造方法。建议自行为程序添加一个无参构造方法,为什么呢?这样做是为了保证使用的灵活性,你就可以同时通过Spring使用设值注入和构造注入。

    具体操作步骤:先为要注入的类添加构造方法,再编写spring-cfg.xml配置文件,一个<constructor-arg>元素表示构造方法的一个参数,使用时不区分参数顺序。当构造方法参数有多个要区分时,可以使用<constructor-arg>的index属性指定参数的位置索引,索引从0开始。还可通过<constructor-arg>的子元素的type属性指定参数的类型,避免字符串和基本数据类型的混淆。
    改造在上面引言提到的文章中打印机程序,A5Paper纸张通过Spring的构造注入方式。修改部分代码如下:

    一、在TextPaper类中加入以下构造方法。
        //无参构造方法,用于方便设值注入的方式
        public TextPaper(){
            
        }
    
        //构造方法,用于注入列数和行数
        public TextPaper(int cols, int rows) {
            this.cols = cols;
            this.rows = rows;
        }
    二、修改spring-cfg.xml文件
    <bean id="A5Paper" class="TextPaper">
            <constructor-arg index="0">
                <value type="int">10</value>
            </constructor-arg>
            <constructor-arg index="1">
                <value type="int">7</value>
            </constructor-arg>
        </bean>
    三、大功告成,程序结果打印正常。
    

    构造注入与设值注入的区别:构造注入的时效性比设值注入好,在对象实例化时就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的方式,使用的灵活性不足,设值注入的灵活性就相对较好。当然,Spring提供的注入方式绝不止这两种,只是这2种常用且简单,其他方式有兴趣的朋友可参考Spring开发手册了解。

    (#^.^#)一起再额外学习一种吧
    2、p命名空间注入方式

    p命名空间的特点是使用属性而不是子元素的形式来配置Bean的属性,从而简化Bean的配置。
    注意:使用p命名空间注入时要先添加p命名空间的声明: xmlns:p="http://www.springframework.org/schema/p"
    也可通过IDEA的快捷键 alt+enter 快速创建声明。
    还是改造打印机程序,修改代码如下即可:

    <bean id="A5Paper" class="TextPaper"
            p:cols="15" p:rows="7"/>
    

    二、注入不同的数据类型

    1、注入直接量(基本数据类型,字符串)

    可通过value属性或者通过<value>子元素进行注入。

    若在XML文件中注入的属性值包含了XML中的特殊字符(&,<,>,",')这五个时,则注入时需要进行特殊处理。
    有此两种解决方法:①使用<![CDATA[ ]]>标记 或 ②特殊字符替换为实体引用。

    XML预定义的实体引用

    符号 实体引用
    & &amp;
    > &gt;
    < &lt;
    " &quots;
    ' &apos;

    严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

    方式①.png 方式②.png
    2、引用其他Bean组件

    可通过ref属性或者通过<ref>子元素进行引用Bean。 <ref>子元素有bean属性和local属性,用法两者是一样的,都是用来指定Bean的id的。它们区别在于:使用local属性只能在同一个配置文件中检索Bean的id,而使用bean实现是可以在其他配置文件中检索id的。(O(∩_∩)O哈哈~ Spring配置文件是可以拆分的,这篇文章讲的不错。

    3、使用内部Bean

    如果一个Bean组件仅在一处使用,可以定义为内部Bean。就是在Bean组件中嵌套Bean,此时内部Bean只能给包裹它的Bean使用而已。

    4、注入集合类型的属性
    • 使用<list>标签注入List集合类型或者数组类型
    • 使用<set>标签注入Set集合类型
    • 使用<entry>标签注入Map集合类型,内部是<key><value>键值对标签
    • 使用<props>标签注入Properties类型,内部是<prop>标签

    三、结语:此篇的学习任务就到此结束了,接下来学习采用注解方式实现IoC。这是边看书边摘抄记录的要点和一些实践体会,感谢看到此处~觉得哪篇文章有用就点个喜欢给小江鼓励。

    相关文章

      网友评论

        本文标题:【Spring】依赖注入

        本文链接:https://www.haomeiwen.com/subject/jwoqsqtx.html