Spring:设值注入、构造注入及命名空间注入

注入一般分为三类:

  1. 设值注入:调用相关属性的set方法,完成赋值过程,是实际工作中用的最多的一种。

  2. 构造注入:调用相关的构造器完成的对象创建及其赋值过程,称为构造注入,但是实际工作中不常用

  3. 实现特定接口注入:该方式为侵入式编程,会污染代码,因此基本不用

命名空间注入

命名空间注入是相对于设值注入和构造注入的,是为这两种换了一种写法。p命名空间注入对应的是设值注入,c命名空间注入对应的是构造注入。


设值注入:

我们创建了两个类,分别为类的属性设置了setter方法和tostring方法,如下:

Spring:设值注入、构造注入及命名空间注入

Student

Spring:设值注入、构造注入及命名空间注入

School

在容器里这样可以为属性赋值:

Spring:设值注入、构造注入及命名空间注入

容器配置

这样我们就可以获取为其赋的值,通过测试如下:

Spring:设值注入、构造注入及命名空间注入

测试类

Spring:设值注入、构造注入及命名空间注入

测试结果


p命名空间注入(为设值注入换种写法):

Spring:设值注入、构造注入及命名空间注入


构造注入:

我们在student类和school类只放有构造方法和tostring方法,如下:

Spring:设值注入、构造注入及命名空间注入

Student

Spring:设值注入、构造注入及命名空间注入

School

在容器里配置赋值:

写法一:用index

Spring:设值注入、构造注入及命名空间注入

写法二:用name(提倡用这种写):

Spring:设值注入、构造注入及命名空间注入

写法三:什么也不写,一对一的写,前提位置要对应(这种不提倡):

Spring:设值注入、构造注入及命名空间注入


c命名空间注入(为构造注入换种写法):

Spring:设值注入、构造注入及命名空间注入


属性和成员变量的区别:

我们上面的name里写的是属性名,而不是成员变量名。

属性名就是set、get方法去掉set或get并且首字母变大写即为属性名,它是public的。

成员变量名就是定义的,它是private的。