控制器:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController("/user")
public class UserController {
@Autowired
ServiceInterface service;
@RequestMapping(value = "/save", method = RequestMethod.POST)
public User save(@RequestBody User user) {
return service.save(user);
}
}
服务接口:
package com.example.demo;
public interface ServiceInterface {
public User save(User user);
}
服务:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService implements ServiceInterface{
@Autowired DaoInterface dao;
public User save(User user) {
return dao.save(user);
}
}
Dao界面:
package com.example.demo;
public interface DaoInterface {
public User save(User user);
}
道:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserDao implements DaoInterface{
@Autowired UserRepo repo;
public User save(User user) {
return repo.save(user);
}
}
回购:
package com.example.demo;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepo extends MongoRepository<User, String>{
}
型号:
package com.example.demo;
public class User {
private String firstname;
private String lastname;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
答案 0 :(得分:0)
松散耦合的实践伴随着编码到接口而不是实现。这意味着需要有UserService
,UserDao
的界面和DefaultUserService
,DefaultUserDao
以及DefaultUserService
中的实现必须使用UserDao
接口和在UserController
中必须使用UserService
界面。
但是有些开发人员反驳说,只有当同一个接口有两个实现时,我们才必须编写一个接口。例如:
UserDao
接口和DatabaseUserDao
实施和FileUserDao
实施,其中两个实施都实施UserDao
。
从上面的示例中可以看出,如果我们使用UserDao
接口,我们的代码将会松散耦合,并且可以轻松地在DatabaseUserDao
,FileUserDao
实现之间切换。
<强>更新强>
如果您使用
,现在就引入ServiceInterface
@Autowired
ServiceInterface service;
您的UserController
中的表示Controller和UserService
通过接口松散耦合。