通过构造函数传入类不破坏接口依赖吗
时间: 2023-10-03 12:03:59 浏览: 44
通过构造函数传入类不会破坏接口依赖,只要传入的类实现了依赖的接口即可。在面向对象编程中,我们通常通过接口来定义依赖关系,而不是具体的实现类。这样可以实现代码的灵活性和可扩展性,因为我们可以通过添加新的实现类来扩展接口,而不需要修改高层模块的代码。
假设我们有一个接口UserService,里面定义了一个addUser()方法,然后我们分别有UserServiceImpl和UserDaoImpl两个类实现了UserService接口。如果我们要在高层模块中使用UserService接口,并注入UserService对象,我们可以这样写:
```
public class MyClass {
private final UserService userService;
public MyClass(UserService userService) {
this.userService = userService;
}
public void doSomething() {
User user = new User("John", "Doe");
userService.addUser(user);
}
}
```
在这个例子中,我们定义了一个类MyClass,它依赖于UserService接口,我们在MyClass的构造函数中注入了UserService对象。在MyClass中,我们可以使用UserService来添加用户,并进行操作。这样,MyClass就可以通过构造函数来传入UserService对象,从而实现依赖注入。
如果我们在UserServiceImpl类中添加了@Autowired注解,并注入UserDaoImpl对象,例如:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void addUser(User user) {
userDao.addUser(user);
}
}
```
这样就会直接依赖于UserDaoImpl实现类,而不是依赖于UserService接口,破坏了依赖倒置原则。因此,建议在Java中使用接口来定义依赖关系,并在构造函数中传入实现类对象,这样可以保证代码的灵活性和可扩展性。