zoukankan      html  css  js  c++  java
  • Spring Boot:Consider defining a bean of type '*.*.*' in your configuration解决方案

      果然不看教程直接使用在遇到问题会懵逼,连解决问题都得搜半天还不一定能帮你解决了。。。

    ***************************
    APPLICATION FAILED TO START
    ***************************
    Description:
    Field mapper in com.demo.service.impl.UserServiceImpl required a bean of type 'com.demo.mapper.UserMapper' that could not be found.
    Action:
    Consider defining a bean of type 'com.demo.mapper.UserMapper' in your configuration.

    SpringBoot启动失败,告诉我Bean配置失败,楼主看了看  该用的注解都用上了  这是咋的回事嘞?

    mapper(Dao层)

     1 package com.demo.mapper;
     2 
     3 import org.springframework.context.annotation.ComponentScan;
     4 import org.springframework.stereotype.Repository;
     5 
     6 import com.demo.domain.User;
     7 
     8 //@Component
     9 @Repository
    10 public interface UserMapper {
    11 
    12     public User gYeMian(User u);
    13 
    14     public int sYeMian(User u);
    15 
    16 }

    service

    package com.demo.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.demo.domain.User;
    import com.demo.mapper.UserMapper;
    import com.demo.service.UserService;
    
    @Service(value = "userService")
    public class UserServiceImpl implements UserService{
        
        @Autowired
        private UserMapper mapper;
    
        @Override
        public User gYeMian(User u) {
            User user = mapper.gYeMian(u);
            return user;
        }
    
        @Override
        public int sYeMian(User u) {
            int i = mapper.sYeMian(u);
            return i;
        }
    
    }

    controller

     1 package com.demo.controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.web.bind.annotation.RequestMapping;
     8 import org.springframework.web.bind.annotation.ResponseBody;
     9 
    10 import com.demo.domain.User;
    11 import com.demo.service.UserService;
    12 
    13 @Controller
    14 @RequestMapping(value = "/uc")
    15 public class UserController {
    16     
    17     @Autowired
    18     private UserService userService;
    19     
    20     @ResponseBody
    21     @RequestMapping("/stemp.htm")
    22     private String sYeMian(String muBan, HttpServletRequest request){
    23 
    24         User u = new User();
    25         u.setMuBan(muBan);
    26         System.out.println("muBan=" + muBan);
    27         int i = userService.sYeMian(u);
    28         
    29         if (i>0){
    30             return "存储成功";
    31         }
    32             return "存储失败";
    33     }
    34 
    35 }

    后来在网上看到网友说要用@Mapper注解,这才把问题解决了   至于具体原因,楼主还需要好好看看文档再来解释。

    解决方案一:

    mapper(Dao层)

     1 package com.demo.mapper;
     2 
     3 import org.apache.ibatis.annotations.Mapper;
     4 
     5 import com.demo.domain.User;
     6 
     7 @Mapper
     8 public interface UserMapper {
     9 
    10     public User gYeMian(User u);
    11 
    12     public int sYeMian(User u);
    13 
    14 }

     解决方案二:

    Application(启动类)

     1 package com.demo;
     2 
     3 import org.mybatis.spring.annotation.MapperScan;
     4 import org.springframework.boot.SpringApplication;
     5 import org.springframework.boot.autoconfigure.SpringBootApplication;
     6 
     7 @SpringBootApplication
     8 @MapperScan(value = "com.demo.mapper")
     9 public class App 
    10 {
    11     public static void main(String[] args) throws Exception {
    12         SpringApplication.run(App.class, args);
    13     }
    14 }

    原因:在mybatis-spring-boot-autoconfigure的jar包中有一个类 MybatisAutoConfiguration,在这个类中的registerBeanDefinitions方法告诉了我们

     1 @Override
     2     public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
     3 
     4       logger.debug("Searching for mappers annotated with @Mapper");
     5 
     6       ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
     7 
     8       try {
     9         if (this.resourceLoader != null) {
    10           scanner.setResourceLoader(this.resourceLoader);
    11         }
    12 
    13         List<String> packages = AutoConfigurationPackages.get(this.beanFactory);
    14         if (logger.isDebugEnabled()) {
    15           for (String pkg : packages) {
    16             logger.debug("Using auto-configuration base package '{}'", pkg);
    17           }
    18         }
    19 
    20         scanner.setAnnotationClass(Mapper.class);
    21         scanner.registerFilters();
    22         scanner.doScan(StringUtils.toStringArray(packages));
    23       } catch (IllegalStateException ex) {
    24         logger.debug("Could not determine auto-configuration package, automatic mapper scanning disabled.", ex);
    25       }
    26     }
  • 相关阅读:
    android 源码下载(Windows+Linux)
    Android Studio依赖包冲突 Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
    深入了解Java--1 绪论
    Android Studio 找不到R文件解决方法汇总
    Git学习历程
    word自动生成目录左对齐(缩进)问题
    Android Studio simpleUML(UML工具)使用详解
    android studio 常用快捷键
    当我们提起“女性权益”的时候,我们到底指的是什么?
    weakref模块和弱引用
  • 原文地址:https://www.cnblogs.com/JealousGirl/p/bean.html
Copyright © 2011-2022 走看看