idea报错:Could not autowire. No beans of ‘UserService‘ type found.

文章主要讨论了在使用IDEA时遇到的无法自动连线问题,该问题源于找不到特定类型的服务类。尽管程序编译和运行不受影响,但IDEA会显示错误提示。提出了三种解决方案:禁用特定的代码检查设置,修改@Autowrited注解,或者将@Mapper注解替换为@Repository。同时解释了@Mapper和@Repository在Spring中的区别,前者无需配置扫描地址,后者则需指定扫描路径。
部署运行你感兴趣的模型镜像

点个关注,必回关

翻译:无法自动连线。未找到“用户服务”类型的服务类。
当报错之后idea会提示错误,不过程序的编译和运行都是没有问题的(这个错误提示不会产生任何印象)

解决方案

解决方案1:

Settings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 勾去掉

解决方案2:

@Autowrited改为@Autowrited(required = false)。原因是spring auto scan配置找不到对应的bean,于是提示找不到对应bean的错误。

解决方案3:

@Mapper注解改为@Repository。这样就不用更改@Autorited也不会报错了

@Mapper和@Repository的区别

@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

package cn.njucm.dosepre.service; import cn.njucm.dosepre.dto.LoginRequest; import cn.njucm.dosepre.dto.RegisterRequest; import cn.njucm.dosepre.entity.User; import cn.njucm.dosepre.repository.UserRepository; import cn.njucm.dosepre.util.JwtUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service // 关键!必须加 @Service 注解才能被注入 public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Autowired private PasswordEncoder passwordEncoder; // 用于加密密码 @Autowired private JwtUtil jwtUtil; @Override public void registerDoctor(RegisterRequest request) { if (userRepository.findByUsername(request.getUsername()).isPresent()) { throw new IllegalArgumentException("用户名已存在"); } User user = new User(); user.setUsername(request.getUsername()); user.setPassword(passwordEncoder.encode(request.getPassword())); user.setRole("ROLE_DOCTOR"); // 默认角色 user.setStatus("PENDING"); // 待审核 userRepository.save(user); } @Override public String login(String username, String password) { User user = userRepository.findByUsername(username) .orElseThrow(() -> new BadCredentialsException("用户名或密码错误")); if (!passwordEncoder.matches(password, user.getPassword())) { throw new BadCredentialsException("用户名或密码错误"); } if (!"APPROVED".equals(user.getStatus())) { throw new BadCredentialsException("账户尚未通过审核"); } // 生成 JWT Token return jwtUtil.generateToken(username); } } Cannot resolve symbol 'UserRepository' Cannot resolve symbol 'UserService' Could not autowire. No beans of 'UserRepository' type found. Could not autowire. No beans of 'PasswordEncoder' type found.
11-19
package cn.njucm.dosepre.service; import cn.njucm.dosepre.dto.LoginRequest; import cn.njucm.dosepre.dto.RegisterRequest; import cn.njucm.dosepre.entity.User; import cn.njucm.dosepre.repository.UserRepository; import cn.njucm.dosepre.util.JwtUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service // 关键!必须加 @Service 注解才能被注入 public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Autowired private PasswordEncoder passwordEncoder; // 用于加密密码 @Autowired private JwtUtil jwtUtil; @Override public void registerDoctor(RegisterRequest request) { if (userRepository.findByUsername(request.getUsername()).isPresent()) { throw new IllegalArgumentException("用户名已存在"); } User user = new User(); user.setUsername(request.getUsername()); user.setPassword(passwordEncoder.encode(request.getPassword())); user.setRole("ROLE_DOCTOR"); // 默认角色 user.setStatus("PENDING"); // 待审核 userRepository.save(user); } @Override public String login(String username, String password) { User user = userRepository.findByUsername(username) .orElseThrow(() -> new BadCredentialsException("用户名或密码错误")); if (!passwordEncoder.matches(password, user.getPassword())) { throw new BadCredentialsException("用户名或密码错误"); } if (!"APPROVED".equals(user.getStatus())) { throw new BadCredentialsException("账户尚未通过审核"); } // 生成 JWT Token return jwtUtil.generateToken(username); } } Cannot resolve symbol 'UserService' Could not autowire. No beans of 'PasswordEncoder' type found. Method does not override method from its superclass 'User' is abstract; cannot be instantiated 'setRole(cn.njucm.dosepre.entity.UserRole)' in 'cn.njucm.dosepre.entity.User' cannot be applied to '(java.lang.String)' 'setStatus(cn.njucm.dosepre.entity.UserStatus)' in 'cn.njucm.dosepre.entity.User' cannot be applied to '(java.lang.String)' 'generateToken(java.lang.String, java.lang.String)' in 'cn.njucm.dosepre.util.JwtUtil' cannot be applied to '(java.lang.String)'
11-19
这个报错信息 `Could not autowire. No beans of 'StepQtimeMapper' type found.` 通常出现在使用 Spring 框架进行依赖注入时,表示 Spring 容器中没有找到类型为 `StepQtimeMapper` 的 Bean,因此无法完成自动注入(Autowire)。 ### 报错原因分析: 1. **未正确声明 Mapper 为 Spring Bean** Spring 无法管理一个类,除非它被明确地声明为一个 Bean。如果 `StepQtimeMapper` 是一个接口或普通类,并没有使用 `@Component`、`@Repository` 等注解,或者没有在配置文件中定义为 Bean,Spring 就无法识别它。 2. **未启用组件扫描(Component Scan)** 如果 `StepQtimeMapper` 所在的包没有被包含在 Spring 的组件扫描路径中,Spring 也无法发现它。你需要在配置类或 XML 配置文件中配置组件扫描。 3. **Mapper 是 MyBatis 接口但未使用 @Mapper 注解或未配置 Mapper 扫描** 如果你使用的是 MyBatis 和 Spring 集成,`StepQtimeMapper` 应该是一个接口,并且需要使用 `@Mapper` 注解,或者通过 `@MapperScan` 注解全局扫描 Mapper 接口。 4. **拼写错误或类路径错误** 检查 `StepQtimeMapper` 的类名是否拼写正确,是否导入了正确的包。 --- ### 解决方法示例: 1. **添加注解声明为 Bean** ```java @Repository public interface StepQtimeMapper { // 方法定义 } ``` 2. **使用 MyBatis 的 @Mapper 注解** ```java @Mapper public interface StepQtimeMapper { // 方法定义 } ``` 3. **启用组件扫描(在配置类中)** ```java @Configuration @ComponentScan(basePackages = "com.example.mapper") public class AppConfig { } ``` 4. **使用 @MapperScan 自动扫描所有 Mapper** ```java @Configuration @MapperScan("com.example.mapper") public class MyBatisConfig { } ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖天才小朱(怀玉)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值