簡體   English   中英

Spring MVC 是否可能與多個控制器相同@autowired?

[英]Spring MVC Is it possible same @autowired with multiple controllers?

假設我們有兩個不同的 controller 類, AController.javaBController.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM