2016-06-08 32 views
0

我正在使用play创建示例应用程序。没有model.UserDAO绑定的实现。同时定位models.UserDAO

我得到这些异常运行时:

1) No implementation for models.UserDAO was bound. 
     while locating models.UserDAO 
     for parameter 0 at services.impl.UserServiceImpl.<init>(UserServiceImpl.java:24) 
     while locating services.UserService 
     for parameter 0 at controllers.UserController.<init>(UserController.java:26) 
     while locating controllers.UserController 
     for parameter 4 at router.Routes.<init>(Routes.scala:44) 
     while locating router.Routes 
     while locating play.api.inject.RoutesProvider 
     while locating play.api.routing.Router 
     for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200) 
     while locating play.api.http.JavaCompatibleHttpRequestHandler 
     while locating play.api.http.HttpRequestHandler 
     for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221) 
     at play.api.DefaultApplication.class(Application.scala:221) 
     while locating play.api.DefaultApplication 
     while locating play.api.Application 

谁能帮我解决这个问题。

和我的类是下面,

UserDAO.java

@Named 
@Singleton 
public interface UserDAO extends CrudRepository<User, Long> { 

    @Query("select userId,firstName from User where userId =:userId") 
    public List<Object[]> getUserDetails(@Param("userId") Integer userId); 
} 

UserController.java

@Named 
@Singleton 
public class UserController extends Controller { 

    private final UserService userService; 

    @Inject 
    public UserController(final UserService userService) { 
     this.userService = userService; 
    } 

    public Result getUserDetails(Integer userId) { 

     JsonNode output = Json.toJson(userService.getUserDetails(userId)); 
     return ok(output); 
    } 
} 

UserServiceImpl.java

@Named 
@Singleton 
public class UserServiceImpl implements UserService { 

    private final UserDAO userDAO; 

    @Inject 
    public UserServiceImpl(final UserDAO userDAO) 
    { 
     this.userDAO=userDAO; 
    } 

    public MainDTO getUserDetails(Integer userId) 
    { 
     List<Object[]> query=userDAO.getUserDetails(userId); 
     List<UserDTO> list= new LinkedList<UserDTO>(); 
     UserDTO userDTO=new UserDTO(); 
     MainDTO mainDTO=new MainDTO(); 

     for(Object[] rows : query) 
     { 
      Integer Id = (Integer)rows[0]; 
      String name = (String)rows[1]; 

      userDTO.setNumber(Id); 
      userDTO.setName(name); 
      list.add(userDTO); 
     } 

     mainDTO.setData(list); 

     return mainDTO; 

    } 
} 

请帮我找出上述问题的确切原因是什么。

在此先感谢。

+0

哪里是你的 '的UserDAO' 的实现中使用@Qualifier?你需要用'ImplementedBy'或者在一个guice模块中绑定它。 – rethab

+0

感谢您的回复。现在我使用@ImplementedBy(UserServiceImpl.class)作为注释,但现在又出现了另一个问题:services.impl.UserServiceImpl不扩展models.UserDAO。 ,同时在services.impl.UserServiceImpl处为参数0定位models.UserDAO 。 (UserServiceImpl.java:24) 查找services.UserService作为UserServiceImple不会扩展DAO –

+0

“@ Singleton”或“@ Inject”注释的包是什么?它应该是javax.inject.Singleton和javax.inject.Inject。但还有其他类似Guice,因为你想使用Spring,他们不会工作。 – Kris

回答

0

您应该自动装入或注入它。

@Autowired 
private final UserDAO userDAO; 

而且在servlet-dispatcher.xml

<bean id="UserDAO " class="com.dao.UserDAOImpl"></bean> 

而且你还可以在构造函数中

@Autowired(required=false) 
public UserController(@Qualifier("UserServiceImpl") final UserService userService) { 
    this.userService = userService; 
} 
+0

我已经完成了。但相同的问题获得。 –

+0

而我并没有像servlet-dispatcher.xml那样使用xml。只使用注释。 –

+0

然后在@autowired中提供'ByName = com.pkg.UserDAOImpl' –