Java基础之教你如何正确运用依赖注入
什么是依赖注入?
依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这个模式中,对象在被创建的时候所需的依赖关系被动态注入到对象中。这种方式有助于减少模块之间的耦合性,同时也增强了代码的可扩展性和可维护性。
依赖注入的三种方式
依赖注入有三种方式:构造器注入,Setter注入和接口注入。
- 构造器注入:通过构造函数注入依赖。
- Setter注入:通过Setter方法注入依赖。
- 接口注入:依赖的注入发生在类实现的接口中。
如何实现依赖注入
使用构造器注入
构造器注入是最常见的注入方式。类中的构造函数会接受所需要的依赖作为参数并将其保存在对象中,因此在创建对象的时候就可以通过依赖注入的方式注入需要的依赖。
public class SampleService {
private SampleDao dao;
public SampleService(SampleDao dao) {
this.dao = dao;
}
}
使用Setter注入
Setter注入的方式通过提供Setter方法接收依赖。通过Setter方法设置变量,Setter方法通常具有set前缀。
public class SampleService {
private SampleDao dao;
public void setDao(SampleDao dao) {
this.dao = dao;
}
}
使用接口注入
接口注入是通过接口来实现的。 在接口中,我们定义了一些方法,这些方法配合注入的依赖来工作。
public interface Sample {
public void setDao(SampleDao dao);
}
public class SampleService implements Sample {
private SampleDao dao;
public void setDao(SampleDao dao) {
this.dao = dao;
}
}
依赖注入的优点
- 降低了系统的耦合度:组件之间的依赖关系在系统启动时完成了注入,而不是在代码中直接引用。
- 方便使用:所有的依赖都被集中在了同一个地方,可以更加便捷的管理依赖。
- 易于扩展:新的组件可以通过注入方式来加入系统,而不需要修改原有的代码,这样就便于系统后期的扩展。
示例说明
示例1
假设现在有一个登录模块,需要校验用户名和密码是否匹配。其中,身份校验功能由LoginService类实现,而数据校验功能由Validator类实现。需要在LoginService类中调用Validator的方法来完成密码的校验。
在这种情况下,如果不使用依赖注入,那么校验方法可能会这样写:
public class LoginService {
public boolean loginCheck(String userName, String password) {
Validator validator = new Validator();
if ( validator.check(password)){
return true;
} else {
return false;
}
}
}
public class Validator {
public boolean check(String password) {
return "123456".equals(password);
}
}
现在,我们使用依赖注入实现这个功能。
public class LoginService {
private Validator validator;
public LoginService(Validator validator) {
this.validator = validator;
}
public boolean loginCheck(String userName, String password) {
if (validator.check(password)){
return true;
} else {
return false;
}
}
}
public class Validator {
public boolean check(String password) {
return "123456".equals(password);
}
}
示例2
假设现在有一个Dao类和一个Service类:
public class SampleDao {
public void save() {
System.out.println("save data");
}
}
public class SampleService {
private SampleDao dao;
// 构造器注入
public SampleService(SampleDao dao) {
this.dao = dao;
}
// Setter注入
public void setDao(SampleDao dao) {
this.dao = dao;
}
// 业务方法
public void doDataSave() {
dao.save();
}
}
在这个例子中,我们在SampleService中使用了构造器注入和Setter注入两种方式来实现依赖注入,同时,SampleService类中的doDataSave()方法调用了SampleDao中的save()方法。设置好依赖关系之后,我们就可以在调用SampleService类中的doDataSave()方法时,自动注入SampleDao的依赖,从而实现数据持久化操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之教你如何正确运用依赖注入 - Python技术站