2012-05-10 142 views
0

我对我的Maven项目,具有用户类的域图层,具有CRUD功能的服务的数据图层以及具有控制器类的Web图层具有Restful设计。但是,当我运行该项目,我得到以下错误:@Autowired注释与弹簧无法正常工作

javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
........ 
java.lang.Thread.run(Thread.java:680) 


root cause 

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of autowired dependencies failed; nested    
    exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: ........service.UserService org. 
    bk.samples.mvc.UserController.userService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [se. 
    datalayer.guards.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency 
    annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) .......... 

root cause 

org.springframework.beans.factory.BeanCreationException: Could not autowire field: .........service.UserService 
org.bk.samples.mvc.UserController.userService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type 
[se.datalayer.guards.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency 
annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} .......... 

root cause 

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [.........service.UserService] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793) ....... 

然后我删除了@Autowired注释,但得到的错误如下:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) 
     org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

    root cause 

    java.lang.NullPointerException 
     org.bk.samples.mvc.UserController.allUsers(UserController.java:32) 
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method).......... 

userController类是:

@Controller 
@RequestMapping(value="/") 
public class UserController 
{ 
    @Autowired 
    UserService userService; 

    @RequestMapping(value="/users", method=RequestMethod.GET) 
    public ModelAndView allUsers() 
    { 

    ModelAndView mvd= new ModelAndView(); 
    Collection<User> allUsers= new ArrayList<User>(); 
    allUsers= userService.findAllUsers(); 
    System.out.println(allUsers); 
    mvd.addObject("allUsers", allUsers); 
    return mvd; 
    } 
}   

我不知道是什么导致了这个问题,我会很感激任何帮助。

+1

我不知道它是如何是一个maven问题。注释在编译期间不会被查看,而是运行时间。这个错误主要是说你没有在其中定义'UserService'类的依赖性工件。 – CoolBeans

+1

退一步 - 您试图简单地删除注释,并仍然期望能够运行,听起来像您不熟悉您正在使用的环境。请使用Spring进行标记; Maven与这个问题无关。 –

+0

这不是一个问题,但我需要帮助,如果任何人都可以帮助我,我将不胜感激。 – user1067665

回答

0

它与Maven无关。你的Spring配置有问题。它告诉你,你没有定义UserService类型的Spring bean,所以它不能创建你的控制器bean,因为它依赖于拥有一个UserService(通过@Autowired注解表达)。您可能想看看overview of the Spring container和/或Spring MVC framework

+0

好吧,也许标题不是很好,但是,有人能帮我找出问题吗? – user1067665

+0

我回答了你的问题:你没有UserService bean可用于注入你的控制器。此外,我链接的材料将帮助您了解您的项目如何工作,从而找出问题所在。 –

0

这很可能是您的web应用程序弹簧配置错误,并且与maven无关。无论你在哪里引导春天,你都可能包括你的webapp配置,但不包括你的数据层spring bean。

+0

嗨,给大家。我没有伤到任何有关maven的问题,问题是maven问题。我刚问过是什么原因导致这个问题,以及它依赖于什么等等。当我使用主要方法时,它工作正常,但没有与控制器。 – user1067665

+0

如果你不相信maven是问题的一部分,那么你应该从这个问题中删除maven标签,这就是我们认为你正在关注maven的原因。至于解决这个问题,它听起来像是弹簧配置问题。您在web应用程序的应用程序上下文配置中缺少一些东西,因此请查看您定义userService bean的位置,并确保它包含在您的web应用程序的spring配置中。 – digitaljoel