【Spring】依赖注入

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

一、IoC扩展

1、构造注入用法,即spring通过构造方法来赋值。在上面提到的那篇文章中使用的设值注入是Spring通过JavaBean的无参构造方法实例化对象。当我们在程序中编写了有参构造方法时,JVM就不会再提供默认的无参构造方法。建议自行为程序添加一个无参构造方法,为什么呢?这样做是为了保证使用的灵活性,你就可以同时通过Spring使用设值注入和构造注入。
具体操作步骤:先为要注入的类添加构造方法,再编写spring-cfg.xml配置文件,一个元素表示构造方法的一个参数,使用时不区分参数顺序。当构造方法参数有多个要区分时,可以使用的index属性指定参数的位置索引,索引从0开始。还可通过的子元素的type属性指定参数的类型,避免字符串和基本数据类型的混淆。
改造在上面引言提到的文章中打印机程序,A5Paper纸张通过Spring的构造注入方式。修改部分代码如下:

一、在TextPaper类中加入以下构造方法。
    //无参构造方法,用于方便设值注入的方式
    public TextPaper(){
        
    }

    //构造方法,用于注入列数和行数
    public TextPaper(int cols, int rows) {
        this.cols = cols;
        this.rows = rows;
    }
二、修改spring-cfg.xml文件

        
            10
        
        
            7
        
    
三、大功告成,程序结果打印正常。

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

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

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



二、注入不同的数据类型

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

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

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

XML预定义的实体引用

符号 实体引用
& &
> >
< <
" "s;
' '

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

【Spring】依赖注入_第1张图片
方式①.png
【Spring】依赖注入_第2张图片
方式②.png
2、引用其他Bean组件

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

3、使用内部Bean

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

4、注入集合类型的属性
  • 使用标签注入List集合类型或者数组类型
  • 使用标签注入Set集合类型
  • 使用标签注入Map集合类型,内部是键值对标签
  • 使用标签注入Properties类型,内部是标签

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

你可能感兴趣的:(【Spring】依赖注入)