Spring自动装配《上》

举报
Java李杨勇 发表于 2022/07/31 20:09:58 2022/07/31
【摘要】 我们把 Spring 在 Bean 与 Bean 之间建立依赖关系的行为称为“装配”。Spring 的 IOC 容器虽然功能强大,但它本身不过只是一个空壳而已,它自己并不能独自完成装配工作。需要我们主动将 Bean 放进去,并告诉它 Bean 和 Bean 之间的依赖关系,它才能按照我们的要求完成装配工作。例如,一个部门(Dept)可以有多个员工(Employee),而一个员工只可能属于某一...

我们把 Spring 在 Bean 与 Bean 之间建立依赖关系的行为称为“装配”。

Spring 的 IOC 容器虽然功能强大,但它本身不过只是一个空壳而已,它自己并不能独自完成装配工作。需要我们主动将 Bean 放进去,并告诉它 Bean 和 Bean 之间的依赖关系,它才能按照我们的要求完成装配工作。

例如,一个部门(Dept)可以有多个员工(Employee),而一个员工只可能属于某一个部门,这种关联关系定义在 XML 配置的 Bean 定义中,形式如下。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--部门 Dept 的 Bean 定义-->
<bean id="dept" class="net.biancheng.c.Dept"></bean>
<!--雇员 Employee 的 Bean 定义-->
<bean id="employee" class="net.biancheng.c.Employee">
<!--通过 <property> 元素维护 Employee 和 Dept 的依赖关系-->
<property name="dept" ref="dept"></property>
</bean>
</beans>

对于只包含少量bean的应用程序,这种方法足以满足我们的需要。然而,随着应用程序的不断开发,容器中会有越来越多的bean,bean之间的依赖关系会变得越来越复杂,这使得我们编写的XML配置越来越复杂和繁琐。

我们知道,过于复杂的XML配置不仅可读性差,而且在编写时容易出错,这严重降低了开发人员的开发效率。为了解决这个问题,spring框架还为我们提供了“自动装配”功能。

Spring 自动装配

Spring 的自动装配功能可以让 Spring 容器依据某种规则,为指定的 Bean 从应用的上下文(AppplicationContext 容器)中查找它所依赖的 Bean,并自动建立 Bean 之间的依赖关系。而这一过程是在完全不使用任何 <constructor-arg>和 <property> 元素 ref 属性的情况下进行的。

Spring 的自动装配功能能够有效地简化 Spring 应用的 XML 配置,采用自动装配以减少工作量

Spring 框架式默认不支持自动装配的,要想使用自动装配,则需要对 Spring XML 配置文件中 <bean> 元素的 autowire 属性进行设置。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--部门 Dept 的 Bean 定义-->
<bean id="dept" class="net.biancheng.c.Dept"></bean>
<!--雇员 Employee 的 Bean 定义,通过 autowire 属性设置自动装配的规则-->
<bean id="employee" class="net.biancheng.c.Employee" autowire="byName">
</bean>
</beans>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。