【问题标题】:Spring Autowiring not working - BeanCreationExceptionSpring自动装配不起作用 - BeanCreationException
【发布时间】:2014-09-01 17:11:26
【问题描述】:

我想将 Spring 与 Hibernate 集成。我对这两种技术都很陌生。目前我收到这样的错误:

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public service.UserService controller.HomeController.userService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying 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)} 

有人可以帮帮我吗?

package controller;

@Controller  
public class HomeController {  

   @Autowired  
    private UserService userService;  


   @RequestMapping("/register")  
    public ModelAndView getRegisterForm(@ModelAttribute("user") User user,  
            BindingResult result) {  

        ArrayList<String> gender = new ArrayList<String>();  
        gender.add("Male");  
        gender.add("Female");  

        ArrayList<String> city = new ArrayList<String>();  
        city.add("Delhi");  
        city.add("Kolkata");  
        city.add("Chennai");  
        city.add("Bangalore");  

        Map<String, Object> model = new HashMap<String, Object>();  
        model.put("gender", gender);  
        model.put("city", city);  

        System.out.println("Register Form");  
        return new ModelAndView("Register", "model", model);  

    }  


    @RequestMapping("/saveUser")  
    public ModelAndView saveUserData(@ModelAttribute("user") User user,  
            BindingResult result) {  

        userService.addUser(user);  
        System.out.println("Save User Data");  
        return new ModelAndView("redirect:/userList.html");  

    }  


    @RequestMapping("/userList")  
    public ModelAndView getUserList() {  

        Map<String, Object> model = new HashMap<String, Object>();  
        model.put("user", userService.getUser());  
        return new ModelAndView("UserDetails", model);  

    }  

}  

package service;


@Service  

public class UserServiceImpl implements UserService {  


    @Autowired  
    UserDao userDao;  
    @Override  
    public void addUser(User user) {  
        userDao.saveUser(user);  

    }  


    @Override  
    public List<User> getUser() {  
        return userDao.getUser();  

    }  
}  

spring-servlet 代码: 嗨,我的新项目需要一个 Spring,Hibernate 集成示例。所以我从网站上复制了这个。我做了一些修改。它不工作请帮助我

   <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/tx  
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <context:property-placeholder location="classpath:jdbc.properties" /> 
    <context:component-scan base-package="controller" />
    <tx:annotation-driven/>
    <bean id="jspViewResolver"  
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="viewClass"  
            value="org.springframework.web.servlet.view.JstlView" />  
        <property name="prefix" value="/WEB-INF/view/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  

    <bean id="dataSource"  
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName" value="${database.driver}" />  
        <property name="url" value="${database.url}" />  
        <property name="username" value="${database.user}" />  
        <property name="password" value="${database.password}" />  
    </bean>  


  <bean id="myydao" class="dao.UserDaoImpl">
       <property name="sessionFactory" ref="sessionFactory"></property>
  </bean>
  <bean name="/user/*.htm" class="controller.HomeController" >
  <property name="UserDao" ref="mydao" />
  </bean>

    <bean id="hibernateTransactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean> 
   </beans>

【问题讨论】:

标签: spring


【解决方案1】:

我假设你还没有将 bean 添加到你的 Spring 应用程序上下文中

如果您使用的是 xml,则需要在 xml 文件中添加如下内容:

  <bean class="service.UserServiceImpl" id="userService"/>

或者,如果您使用的是基于 Java 的配置类,则需要像这样添加一个 bean:

@Configuration
public class AppConfig{

   @Bean
   public UserService userService() {
       return new UserServiceImpl();
   }
}

或者,如果您将 @Component 注释添加到 UserServiceImpl 并将 @ComponentScan("service") 注释添加到 Java App 配置,它应该会选择用户服务

【讨论】:

  • 即使我没有得到......而且我正在附加我的 spring-servlet.xml 请检查一下
  • @user3828255 抱歉,我不确定我是否理解您的评论。请你说的更清楚些。
  • 实际上我忘记在 spring-servlet.xml 中添加服务 bean。现在我又添加了同样的异常我重复。请帮助我摆脱这个
  • 你所有的其他豆子都被捡起来了吗?您的 spring-servlet.xml 是否在其他地方被正确提取?
  • ya Ben 和我已将 spring-servlet.xml 附在上面,请参阅
【解决方案2】:

确保您已启用组件扫描以自动检测类并注册相应的 bean。 您应该在 bean 定义 XML 文件中添加以下条目:

<context:component-scan base-package="org.example"/>

More about automatic bean detection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2018-12-01
    • 2016-06-03
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多