spring最好不要在类上添加autowired,而是在接口上添加,这样说对吗
时间: 2024-03-10 22:48:09 浏览: 87
在Spring中,建议在接口上添加@Autowired注解,而不是在类上添加。这是因为如果我们在类上添加@Autowired注解,就会直接依赖于具体的实现类,而不是依赖于抽象的接口。这样就会破坏依赖倒置原则,使得代码更加脆弱和难以扩展。
而在接口上添加@Autowired注解,则可以保证依赖关系只依赖于接口,而不依赖于具体的实现类。这样就可以使代码更加灵活和可扩展,因为我们可以通过添加新的实现类来扩展接口,而不需要修改高层模块的代码。
举个例子,假设我们有一个接口UserService,里面定义了一个addUser()方法,然后我们分别有UserServiceImpl和UserDaoImpl两个类实现了UserService接口。如果我们要在高层模块中使用UserService接口,并注入UserService对象,我们可以这样写:
```
@Autowired
private UserService userService;
```
这样就可以自动注入UserService的实现类对象,而且不需要指定具体的实现类,符合依赖倒置原则。
但是,如果我们在UserServiceImpl类上添加@Autowired注解,例如:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void addUser(User user) {
userDao.addUser(user);
}
}
```
这样就会直接依赖于UserDaoImpl实现类,而不是依赖于UserService接口,破坏了依赖倒置原则。因此,建议在Spring中使用接口来定义依赖关系,并在接口上添加@Autowired注解,这样可以保证代码的灵活性和可扩展性。
阅读全文