Spring IOC 要点:之三Bean的依赖

本文详细介绍了Spring框架中的两种依赖注入方式:Setter注入和构造器注入。通过具体代码示例展示了如何利用Spring容器来管理对象之间的依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[align=center][size=large][b]注入依赖[/b][/size][/align][align=center][size=large][b]Setter注入[/b][/size][/align]
下面的例子将展示使用setter注入依赖。注意,这个类并没有什么特别之处,它就是普通的Java类。
<bean id="simpleMovieLister" class="examples.SimpleMovieLister">
<!-- setter 注入所依赖的MovieFinder实例-->
<property name="movieFinder">
<ref bean="movieFinder"/>
</property>
</bean>
<!-- MovieFinder的实例在这被Spring Ioc托管-->
<bean id="movieFinder" class="examples.MovieFinder"/>

public class SimpleMovieLister {
// SimpleMovieLister类 依赖 MovieFinder类
private MovieFinder movieFinder;
// 给定 setter 方法用来让Spring 容器注入 MovieFinder类的实例
public void setMoveFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}

// 略过业务逻辑...
}
正如你所看到的,bean类中的setter方法与xml文件中配置的属性是一一对应的。
处理bean依赖关系通常按以下步骤进行:

根据定义bean的配置(文件)创建并初始化BeanFactory实例(大部份的Spring用户使用支持XML格式配置文件的BeanFactory或ApplicationContext实现)。

每个bean的依赖将以属性、构造器参数、或静态工厂方法参数的形式出现。当这些bean被实际创建时,这些依赖也将会提供给该bean。

每个属性或构造器参数既可以是一个实际的值,也可以是对该容器中另一个bean的引用。

每个指定的属性或构造器参数值必须能够被转换成属性或构造参数所需的类型。默认情况下,Spring会能够以String类型提供值转换成各种内置类型,比如int、long、String、boolean等。

需要强调的一点就是,Spring会在容器被创建时验证容器中每个bean的配置,包括验证那些bean所引用的属性是否指向一个有效的bean(即被引用的bean也在容器中被定义)。

[color=red]在bean被实际创建之前,bean的属性并不会被设置。[/color]也就是说,在构造器中千万不要引用("[color=green]将[/color]")被注入的Bean,本人有深刻教训
[size=large][align=center][b]构造器注入[/b][/align][/size]
基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个协作者。此外,还可通过给静态工厂方法传参数来构造bean。给构造器传参与给静态工厂方法传参是类似的。

public class SimpleMovieLister {
// SimpleMovieLister类 依赖 MovieFinder类
private MovieFinder movieFinder;
// 通过构造器传参 Spring 容器将把MovieFinder类的实例作为参数传给构造器
public SimpleMovieLister(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}

// 略过业务逻辑...
}
<bean id="simpleMovieLister" class="examples.SimpleMovieLister">
<!-- 把MovieFinder实例作为参数传给构造器-->
<constructor-arg name="movieFinder">
<ref bean="movieFinder"/>
</constructor-arg>
</bean>
<!-- MovieFinder的实例在这被Spring Ioc托管-->
<bean id="movieFinder" class="examples.MovieFinder"/>
传给静态工厂[b][size=medium]方法的参数由constructor-arg元素提供,这与使用构造器注入时完全一样[/size][/b]
<bean id="exampleBean" class="examples.ExampleBean"
factory-method="createInstance">
<constructor-arg ref="anotherExampleBean"/>
<constructor-arg ref="yetAnotherBean"/>
<constructor-arg value="1"/>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>
public class ExampleBean {
// a private constructor
private ExampleBean(...) {
...
}

// a static factory method; the arguments to this method can be
// considered the dependencies of the bean that is returned,
// regardless of how those arguments are actually used.
public static ExampleBean createInstance (
AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) {
ExampleBean eb = new ExampleBean (...);
// some other operations
...
return eb;
}
}
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值