【发布时间】:2016-06-08 10:34:21
【问题描述】:
我正在使用 play 创建示例应用程序。
我在运行时遇到这些异常:
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;
}
}
请帮我找出上述问题的确切原因。
提前致谢。
【问题讨论】:
-
您的“UserDAO”实施在哪里?您需要将其与“ImplementedBy”或 guice 模块绑定。
-
感谢您的回复。现在我使用了 @ImplementedBy(UserServiceImpl.class) 之类的注释,但现在又遇到了另一个问题 services.impl.UserServiceImpl 没有扩展 models.UserDAO。在为 services.impl.UserServiceImpl.
(UserServiceImpl.java:24) 中的参数 0 定位 models.UserDAO 同时定位 services.UserService 作为 UserServiceImple 不扩展 DAO -
你的
@Singleton或@Inject注解的包是什么?它应该是 javax.inject.Singleton 和 javax.inject.Inject。但是还有来自 Guice 的其他类似产品,因为你想使用 Spring,它们就行不通了。 -
是的@Kris。我只使用 avax.inject.Singleton。但我没有找到解决办法。
-
嗯,我觉得一切都很好。虽然到目前为止我还没有一起使用过 Spring 和 Play。您是否尝试过使用 @Autowired 的原始 Spring 注解?
标签: java spring-mvc playframework