首页 文章

Spring Boot没有自动装配@Repository

提问于
浏览
1

我'm trying to configure a datasource with Spring Boot but I'得到 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.mycompany.myapp.repository.UserRepository com.mycompany.myapp.service.AuthenticationServiceImpl.userRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mycompany.myapp.repository.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)}

这些是我的项目结构:

主类:

package com.mycompany.myapp;
@ComponentScan(basePackageClasses = {com.mycompany.myapp.domain.user.User.class,
                                     com.mycompany.myapp.repository.UserRepository.class,
                                     com.mycompany.myapp.service.AuthenticationServiceImpl.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

域类:

package com.mycompany.myapp.domain.user
@Entity
public class User {

    @Id
    @GeneratedValue
    private long id;
    @Column(nullable = false)
    private String name;
    @Column(nullable = false)
    private String lastName;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private String email;

    public User() {}

    public User(String email, String password){
        this.email = email;
        this.password = password;
    }
}

库:

package com.mycompany.myapp.repository;
public interface UserRepository extends CrudRepository<User, Long> {

    List<User> findByLastName(String lastName);
}

调节器

package com.mycompany.myapp.service;
@RestController
public class AuthenticationServiceImpl implements AuthenticationService {

    @Autowired
    private UserRepository userRepository;

    @RequestMapping("/add")
    public User add(){
        User user = new User();
        user.setName("Juan");
        user.setLastName("Sarpe");
        user.setEmail("email@gmail.com");
        userRepository.save(user);
        return user;
    }
}

application.properties

spring.datasource.url:jdbc:mysql://localhost:3306/mydb
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

我想我的应用程序没有在UserRepository上检测到我的@Repository注释 . 据我所知,Spring Boot会自动将我的类设置为@Repository,因为它正在扩展CrudRepository . 我究竟做错了什么? (请注意,我的Application类位于包层次结构之上) .

3 回答

  • 1

    您在配置中尝试了@EnableJpaRepositories吗?

  • 1

    In main class of spring boot you have to use this below annotation :

    @SpringBootApplication
    @ComponentScan(basePackages = "basepackage")
    @EntityScan(basePackages ="basepackage")
    @EnableAutoConfiguration
    @EnableJpaRepositories(basePackages = "basepackage")
    

    In Repository layer use below annotation :

    import org.springframework.stereotype.Repository;

    import org.springframework.transaction.annotation.Transactional;

    @Transactional
    @Repositor
    

    If you have any service layer then use below annotation in the implementation class:

    import org.springframework.stereotype.Service;
    
    @Service
    
  • 0

    配置的标准方法是创建基本标记存储库接口,并在组件扫描中提供该接口 .

    public interface RepositoryPackage {
    }
    

    将接口RepositoryPackage保存在与UserRepository相同的包中 .

    @ComponentScan(basePackageClasses= "RepositoryPackage.class")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

相关问题