1. 程式人生 > >SpringMVC 錯誤分析:@Autowired Could not autowire field

SpringMVC 錯誤分析:@Autowired Could not autowire field

在開發SpringMVC中碰到了元件不能@Autowired的錯誤,以前好像也碰到過,怎麼解決的忘記了,今天記在這裡。可供碰到同樣問題的朋友參考。

下面是Controller元件:
@Controller
public class ManageUserController {
    private UserService userService;
   
    @Autowired   //此處自動注入userService
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
   .....
}

其中Service元件為:
@Transactional
@Service("userService")
public class UserService implements UserServiceInf {
    private UserDao userDao;
   
   
    @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

   
    public void createUser(User user) {
        this.userDao.createUser(user);
    }
  ....
}

執行系統後總是出現userService不能autowired注入的錯誤。費了半天勁,最後總是解決了。Spring的注入基於介面實現,基於介面的方式一是可以使得各個元件鬆耦合,而且也可以輕鬆的替代某一元件。
所以應該講元件引用改為介面方式。
Controller元件中的userService元件應
由:private UserService userService;
改為: private UserServiceInf userService;

同理Service元件中的userDao元件應
由: private UserDao userDao;
改為: private UserDaoInf userDao;