也許我可以發表一些可以澄清你的情況的摘錄。
@Repository
public class MyRepositoryImpl implements MyRepository {
//CRUD implementation or whatever
}
在不同的包:
@Service
public class MyServiceImpl implements MyService {
@Autowired //constructor-injection
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
private final MyRepository myRepository;
public void myBusinessLogic() {
MyPojo pojo = new MyPojo(); //not dependent on Spring
myRepository.doSomething();
//place calls to X here as needed
}
}
最後:
@Controller
public class MyController {
@Autowired
public MyController(MyService myService) {
this.myService = myService;
}
private final MyService myService;
@GetMapping("/myPage")
public String doIt() {
myService.myBusinessLogic();
return "myPage";
}
}
凡MyRepository
和MyService
一個
//nothing spring specific
public class MyPojo {
//properties
}
在不同包
這些接口將包含各自實現的合約。
單一職責原則
主要一點要注意的是,你的POJO是不會「使用回購」,你在你的問題提了。它代表一個實體,不應該關心任何特定的存儲庫。這似乎與你的問題有關 - POJO不應該調用存儲庫(在這種情況下是你的「X」類)。似乎應該重新審視設計,如果是這樣的話。
你可以考慮用'Provider'而不是'new'實例化'X'嗎? –