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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM