SpringBoot@Autowired没法⾃动注⼊的问题
Application 启动类:
@SpringBootApplication
@EnableConfigurationProperties
@ComponentScan(basePackages = { "sting"})
public class Application {
@Bean
RestTemplate restTemplate() {
return new RestTemplate();}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("成功启动");
}
Dao层:
public interface UserRepository extends JpaRepository<User, String>{
User findByUsername(String username);  //
}
Service 层:注⼊⼀个继承了JPA 的接⼝,理论上spring boot 会把JPA 注⼊repository,该接⼝是⼀定不需要实现类的.
上述⽅法实现了按Username查询User实体,可以看到我们这⾥没有任何类SQL语句就完成了个条件查询⽅法。
这就是Spring-data-jpa的⼀⼤特性:通过解析⽅法名创建查询
@Service
public class DataInit {
@Autowired
UserRepository userRepository;
}
spring启动流程面试回答
但是会提⽰错误:提⽰@Autowired 不能正常注⼊:
可正常编译,没法运⾏,gradle bootrun 时提⽰错误:
caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: sting.data.sting.service.DataInit.userRepository; nested exception is org.spring
framework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [sting.data.UserRepository] 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),
@org.springframework.beans.factory.annotation.Qualifier(value=userRepository)}
Execution failed for task ':bootRun'.
> Process 'command 'C:\Program Files (x86)\Java\jdk1.8.0_101\'' finished with non-zero exit value 1
总结:
出现该类错误时,可有⼀下⼏个问题需要去检查:
1. 检查各类是否加了注解,包括@service,@repository 等等;(注意@Autowired放在service实现上,⽽不是接⼝类上⾯。)
2. 包是否正确扫描到,这个很重要!!!(我的问题就是因为这个)
注意:bbs.csdn/topics/391978111?page=1#post-401966615 (#5)
SpringBoot项⽬的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
“Application类”是指SpringBoot项⽬⼊⼝类。这个类的位置很关键:
如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有⼦包,如果service或dao所在包不在com.boot.app及其⼦包下,则不会被扫描!
即, 把Application类放到dao、service所在包的上级,com.boot.Application
知道这⼀点⾮常关键,不知道spring⽂档⾥有没有给出说明,如果不知道还真是⽆从解决.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。