[英]Spring MVC Is it possible same @autowired with multiple controllers?
假設我們有兩個不同的 controller 類, AController.java
和BController.java
。
public class AController {
@Autowired
private AdminService adminService;
}
public class BController {
@Autowired
private AdminService adminService;
}
我想知道這是否可以。
+ 編輯
AdminService(Interface) 前三位來自Acontroller,一個來自BController。 在創建selectCouponByTerm()
selectNormalList()
沒有問題。
public interface AdminService {
List<Member> selectNormalList();
List<Member> selectPartnerList();
List<Coupon> selectCouponByDate(String date);
List<Coupon> selectCouponByTerm(String startDate, String endDate);
}
AdminServiceImpl(實現接口AdminService)
@Service
public class AdminServiceImpl implements AdminService{
@Autowired
private static AdminDao adminDao;
@Override
public List<Member> selectNormalList() {
return adminDao.selectNormalList();
}
@Override
public List<Member> selectPartnerList() {
return adminDao.selectPartnerList();
}
@Override
public List<Coupon> selectCouponByDate(String date) {
return adminDao.selectCouponByDate(date);
}
@Override
public List<Coupon> selectCouponByTerm(String startDate, String endDate) {
return adminDao.selectCouponByTerm(startDate, endDate);
}
}
這就是依賴注入的重點。 您可以將依賴項注入到其他任何需要它的地方。
不過,請注意你在哪里注射什么; 如果兩個控制器共享相同的功能,以至於它們具有相同的依賴關系,那么它們真的應該是兩個控制器嗎?
我建議對服務 class 采用以下方法您的邏輯結構方式將導致您出現NULLPointerException
@Service
public class AdminServiceImpl implements AdminService{
private AdminDao adminDao;
@Autowired
private AdminService adminService;
public AdminServiceImpl (AdminDao adminDao){
this.adminDao= adminDao;
@Override
public List<Member> selectNormalList() {
return adminDao.selectNormalList();
}
@Override
public List<Member> selectPartnerList() {
return adminDao.selectPartnerList();
}
@Override
public List<Coupon> selectCouponByDate(String date) {
return adminDao.selectCouponByDate(date);
}
@Override
public List<Coupon> selectCouponByTerm(String startDate, String endDate) {
return adminDao.selectCouponByTerm(startDate, endDate);
}
然后在你的控制器中
@Controller
public class AController {
@Autowired
private AdminService adminService;
}
@Controller
public class BController {
@Autowired
private AdminService adminService;
}
是的。 沒關系。 Spring 將在兩個控制器中注入 AdminService。 您必須在 AController 和 BController 上使用 @Controller,在 AdminService class 上使用 @Service。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.