【问题标题】:UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependencyUnsatisfiedDependencyException:创建名为“userController”的 bean 时出错:不满足的依赖项
【发布时间】:2018-01-10 23:22:30
【问题描述】:

我是 Spring MVC 的新手。我面对UnsatisfiedDependencyException。我已经添加了stereotype annotations,但我仍然面临同样的问题。

上下文初始化期间遇到异常 - 取消 刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“userController”的 bean 时出错:不满足的依赖关系 通过字段“userService”表示;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 为依赖项找到了合格的 bean [com.demo.app.service.UserService]:预计至少有 1 个 bean 有资格成为 autowire 候选人。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 看起来积极的重播。

用户控制器:

@CrossOrigin
@RestController
public class UserController {

@Autowired(required=true)
private UserService userService;

@RequestMapping(value = { "/userSave" },consumes = {"multipart/form-data"}, method = RequestMethod.POST)
@ResponseBody
public String saveUserDetails(@RequestPart(value="file",required=false) MultipartFile file,
        @RequestPart("user")User user,
        HttpSession session, HttpServletRequest request,
        HttpServletResponse response){
        System.out.println("data reached...!");
        String result=userService.saveUserData(user,session);
        return result;

}

}

用户服务:

public interface UserService {
     public String saveUserData(User user,HttpSession session);
}

UserServiceImpl:

@Service("userService")
public class UserServiceImpl implements UserService{

@Autowired
UserRepository userRepository;

public String saveUserData(User user,HttpSession session){
    String  output;
    Date regDate=new Date();
    user.setRegDate(regDate);
    output= userRepository.saveUserData(user);
    return output;
}

}

用户存储库:

@Component
@Transactional
public class UserRepository  extends BaseRepository{

@Autowired
protected SessionFactory sessionFactory;


public String saveUserData(User user) {

    final Session session = (Session) getSessionFactory();
    try {
        session.beginTransaction();
        Query query=session.createQuery("UPDATE User set user_Name =:userName,"
                + "reg_Date =:regDate,img_Id=:imgId");
        query.setParameter("userName", user.getUserName());
        query.setParameter("regDate", user.getRegDate());
        query.setParameter("imgId", user.getImgId());
        query.setParameter("emailId", user.getImgId());
        session.save(user);
        session.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

}

spring.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                    http://www.springframework.org/schema/context 
                    http://www.springframework.org/schema/context/spring-context-4.0.xsd
                    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
                    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
                    ">

    <context:annotation-config />

    <context:component-scan base-package="com.demo.app" />
    <mvc:default-servlet-handler />

    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
            </bean>
        </mvc:message-converters>
    </mvc: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/html/" />
        <property name="suffix" value="html" />
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/UserDB" />
        <property name="username" value="root" />
        <property name="password" value="password" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.demo.app.model.User</value>

            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.Exception">Error</prop>
            </props>
        </property>
    </bean>
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="2097152" />
    </bean>
</beans>

错误:

SEVERE: Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.demo.app.service.UserService]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)

请帮帮我,

谢谢

【问题讨论】:

  • 你的组件扫描是什么样子的,你的包声明是什么?
  • @Jens 感谢您的重播。我可以发布我的 spring.xml 文件吗
  • 显示注入服务的控制器代码
  • @SagarKadu 你确定我会更新我的代码检查一次

标签: java spring spring-mvc


【解决方案1】:

@Service("userService") 应该靠近实现而不是接口。

【讨论】:

  • 那说明spring没有创建这个bean,可能是你的服务不在component-scan包中
  • 在我添加组件扫描后检查它
【解决方案2】:

@service 注解在服务实现中使用,而不是在接口中,因为接口只是将控制器映射到实际的服务实现和其他逻辑......

【讨论】:

    【解决方案3】:

    最后我解决了 .spring 依赖 jar 文件版本不匹配。所有 spring 依赖版本都是一样的。

         <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-orm</artifactId>
       <version>4.2.3.RELEASE</version>
    </dependency>
      </dependencies>
    

    【讨论】:

      【解决方案4】:

      检查以下所有要点:

      1 - @Entity 添加到所有实体。

      2 - @Service 添加到所有 DAO 或任何其他组件。

      3 - @RestController 添加到所有控制器。

      我的错误未在我的实体上添加@Entity。

      【讨论】:

        【解决方案5】:

        “没有为依赖项 [com.demo.app.service.UserService] 找到符合条件的 bean:预计至少有 1 个符合自动装配候选条件的 bean。”

        以上错误表示未创建 UserService bean。 你能检查一下你是否在这里提供了正确的基础包。

        您也可以将注释更改为 UserRepository @Component 到 @Repository。

        【讨论】:

          【解决方案6】:

          我的问题是我在这堂课中没有@EnableWebSecurity:

          @Configuration
          @EnableWebSecurity
          public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
          
              @Override
              protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          
                  // add our users for in memory authentication
          
                  User.UserBuilder users = User.withDefaultPasswordEncoder();
          
                  auth.inMemoryAuthentication()
                          .withUser(users.username("john").password("test123").roles("EMPLOYEE"))
                          .withUser(users.username("mary").password("test123").roles("MANAGER"))
                          .withUser(users.username("susan").password("test123").roles("ADMIN"));
              }
          
          
          
              @Override
              protected void configure(HttpSecurity http)  throws Exception {
                  http.authorizeRequests().anyRequest().authenticated().and()
                          .formLogin().loginPage("/showLoginPage")
                          .loginProcessingUrl("/authenticateTheUser")
                          .permitAll();
              }
          }
          

          【讨论】:

            【解决方案7】:

            我也有这个问题。

            在我的情况下,我认为是 Maven 依赖项并对其进行了更新,并将我的所有 Java 文件都作为错误。

            最后,在更新了所有的 Maven 依赖并添加了这个

            <dependency>
              <groupId>org.glassfish.jaxb</groupId>
              <artifactId>jaxb-runtime</artifactId>
              <version>2.3.1</version>
            </dependency>
            

            这适用于 Java 版本 > 9 的项目 我在我的项目中使用了 OpenJDK 11。 谢谢。希望对您有所帮助。

            快乐编码。 ??

            【讨论】:

              猜你喜欢
              • 2016-12-09
              • 1970-01-01
              • 2020-04-04
              • 2019-08-07
              • 2021-08-14
              • 2020-07-26
              • 2017-05-24
              • 2023-03-12
              • 2020-05-03
              相关资源
              最近更新 更多