Spring框架DI实战:接口、Setter与构造器注入解析
版权申诉
29 浏览量
更新于2024-09-13
1
收藏 57KB PDF 举报
"Spring依赖注入的三种方式实例详解"
在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许我们控制组件之间的耦合,提高代码的可测试性和可维护性。以下是Spring中实现DI的三种主要方式:接口注入、Setter方法注入和构造方法注入。
1. 接口注入
接口注入是通过实现特定接口来注入依赖关系。在这种情况下,`Logic`接口定义了一个`getName()`方法,`LogicImpl`类实现了这个接口并提供了具体实现。Spring可以通过配置将实现了接口的类作为依赖注入到其他类中。不过,在实际示例中,并未展示接口注入的具体实现,因为Spring通常不直接通过接口进行注入,而是通过实现类来完成。
2. Setter方法注入
setter方法注入是最常见的DI方式,它通过调用对象的setter方法来设置依赖。在`LoginAction`类中,如果采用setter方法注入,我们需要创建一个`setLogic(Logic logic)`方法,Spring容器会自动调用这个方法来注入`Logic`的实现类`LogicImpl`。下面是`LoginAction`类使用setter注入的示例:
```java
public class LoginAction {
private Logic logic;
public void setLogic(Logic logic) {
this.logic = logic;
}
public void execute() {
System.out.println("Login Action execute, name from Logic: " + logic.getName());
}
}
```
3. 构造方法注入
构造方法注入是在对象实例化时就注入依赖。这种方式确保对象在创建时就已经具备了所有必要的依赖。在`LoginAction`类中,我们可以创建一个带有`Logic`参数的构造函数,Spring会通过这个构造函数提供依赖。以下是使用构造方法注入的`LoginAction`示例:
```java
public class LoginAction {
private final Logic logic;
public LoginAction(Logic logic) {
this.logic = logic;
}
public void execute() {
System.out.println("Login Action execute, name from Logic: " + logic.getName());
}
}
```
为了配置这些注入,我们需要一个`applicationContext.xml`配置文件,其中定义了`LoginAction`类以及如何注入`Logic`。例如:
```xml
<bean id="logic" class="com.spring.test.di.LogicImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<!-- Setter注入 -->
<property name="logic" ref="logic"/>
<!-- 或者构造方法注入 -->
<constructor-arg>
<ref bean="logic"/>
</constructor-arg>
</bean>
```
在`TestMain.java`中,我们使用`FileSystemXmlApplicationContext`加载配置文件,然后获取`loginAction`的bean实例,执行`execute()`方法,这样就可以看到依赖注入的效果。
Spring的依赖注入提供了灵活的方式来管理组件间的依赖关系,提高了代码的可重用性和可测试性。通过选择合适的注入方式,可以更好地控制类的行为,并降低组件之间的耦合度。
635 浏览量
113 浏览量
111 浏览量
2024-11-03 上传
2024-11-03 上传
2024-11-08 上传
134 浏览量
weixin_38655011
- 粉丝: 9
- 资源: 916
最新资源
- pg_cron:在PostgreSQL中运行定期作业
- Simple Shooting Game using JavaScript with Free Source Code.zip
- Project SoFi-开源
- LopiPusherBundle:捆绑使用Pusher App
- 西门子WinCC_flexible 电子学习解决方案.rar
- skrubbed.github.io:egs d
- DS-UWB.rar_DS-UWB_宽带信号_超宽带_超宽带信号
- jspm驾校学员管理系统毕业设计程序
- JS6.Booleansen[removed]JS 6。 布尔值JavaScript
- Simple Product Inventory System using
- NuQLeus:通过解析器级别的性能指标和错误跟踪来增强GraphQL端点测试功能
- GNSS_SDR_a.zip_GNSS_GNSS_SDR_a_伪卫星_北斗跟踪
- 高斯白噪声matlab代码-PARCS:使用成对的自适应回归累加器(PARCS)检测多个变化点
- Optimierung-开源
- UCGUI学习资料.rar
- css-essentials-css-issue-bot-9000-den01-seng-ft-062220