持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
前言
这篇文章介绍下Spring的依赖,但是Spring依赖的内容不是很多,所以这里也给大家讲解下p命名空间和c命名空间的知识点。
Spring依赖
概念
Spring的依赖与上一篇文章我们讲过的Spring继承非常类似,也是bean容器与bean容器之间的一种关系。依赖关系,从字面意义上来理解,a依赖于b,所以必须是b先创建,a后创建,被依赖的bean先创建,依赖的bean后创建。根据我个人的理解举个简单的例子便于大家理解:🐟必须在水里才能存活,鱼依赖水,水被鱼依赖,所以必须是先有水再有鱼。
作用
Spring配置文件中bean的创建是根据你代码写的bean的顺序来创建的。
代码示例:
1.在配置文件中创建两个bean
<bean id="fish" class="com.xyj.Fish"></bean>
<bean id="water" class="com.xyj.Water"></bean>
2.在两个类的构造方法中打印对象创建信息
创建Fish对象
创建Water对象
当配置文件中bean过多时,就不便于bean的管理,这时你如果需要指定bean的创建顺序时就可以使用Spring的依赖来实现。
实现
实现Spring的依赖很简单,只需要在依赖的bean标签中加上depends-on属性即可,属性值为被依赖bean的id。
代码示例:
1.加入depends-on属性,属性值填water,配置文件中的bean的顺序不变
<bean id="fish" class="com.xyj.Fish" depends-on="water"></bean>
<bean id="water" class="com.xyj.Water"></bean>
2.在两个类的构造方法中打印对象创建信息
创建Water对象
创建Fish对象
这很直接的就能看到两个bean的创建顺序相比之前改变了,这就是Spring的依赖。
p命名空间和c命名空间
联想到我们之前学习的IoC配置文件中的标签,其中有property标签和constructor-arg,没错,我们这里即将要介绍的p命名空间和c命名空间就是分别对应的property标签和constructor-arg标签。p命名空间和c命名空间就是property标签和constructor-arg标签的简化形式。让我们的代码更简单。
p命名空间
在使用p命名空间之前,我们需要在IoC配置文件中beans标签中先引入p命名空间的依赖。
Spring框架有非常多的依赖,需要什么依赖都可以去Spring官网查看,为了方便大家,我就把p命名空间的依赖贴出来。
xmlns:p="http://www.springframework.org/schema/p"
p命名空间的使用
<bean id="dog" class="com.xyj.Dog" p:name="bob" p:age="5" p:variety="秋田" p:host-ref="host"></bean>
打印结果
Dog(name=bob, age=5, variety=秋田, host=Host(name=xyj, age=21))
注意:基本数据类型和String类型用p:name="value",而引用数据类型用p:name-ref="name"
这就是p命名空间的一个使用。
c命名空间
使用c命名空间同样需要先引入c命名空间的依赖:
xmlns:c="http://www.springframework.org/schema/c"
使用c命名空间,还需要对象的类中有无参构造和有参构造。
c命名空间的使用
<bean id="dog" class="com.xyj.Dog" c:name="tom" c:age="3" c:variety="中华田园犬" c:host-ref="host"></bean>
打印结果
Dog(name=tom, age=3, variety=中华田园犬, host=Host(name=xyj, age=21))
注意:基本数据类型和String类型用c:name="value",而引用数据类型用c:name-ref="name"
Spring的依赖和命名空间就介绍到这里有不太清楚的地方可以去看我之前的文章。