无法@Autowire 存储库接口 Spring 启动
Can't @Autowire repository interface Spring Boot
我面临的问题是关于 @Autowire
存储库接口(在我的例子中是 UserRepository),我不知道为什么,但是 @Autowire
失败了。
UserController
class 调用了一个 @Service
class 而这个调用了一个 @Component
(DAO class),DAO class 是 @Autowiring
@Repository
.
Spring 开机主
package com.leagueofsummoners;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.http.HttpStatus;
import com.leagueofsummoners.persistence.interfaces.UserRepository;
@SpringBootApplication
public class LeagueofsummonersApplication {
public static void main(String[] args) {
SpringApplication.run(LeagueofsummonersApplication.class, args);
}
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return (container -> {
ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
container.addErrorPages(error401Page, error404Page, error500Page);
});
}
}
DTO CLASS(实体)
@Entity(name = "user")
@Table(name = "users")
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_user")
private Long idUser;
@Column(nullable = false, name = "summoner_name")
private String summonerName;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String avatar;
@Column(nullable = false)
private String firma;
@Column(nullable = false, name = "permission_level")
private PermissionLevels permissionLevel;
public UserDTO() {
}
存储库接口
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.Repository;
import com.leagueofsummoners.model.dto.UserDTO;
@org.springframework.stereotype.Repository
public interface UserRepository extends Repository<UserDTO, Long> {
Page<UserDTO> findAll(Pageable pageable);
UserDTO findByUsernameIgnoringCase(String username);
UserDTO findByIdUser(int idUser);
}
DAO class(自动装配存储库时失败 class)
@Component
public class UserDAO{
@Autowired
private UserRepository userRepository;
public UserDTO findByUsernameIgnoringCase(String username) {
return this.userRepository.findByUsernameIgnoringCase(username);
}
}
您需要扫描 JpaRepositories
在您的应用程序中添加此注释 Class :
@EnableJpaRepositories("com.leagueofsummoners.persistence.interfaces")
编辑:
为了配置 entityManager
您需要添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
如果您添加此依赖项,它将自动为您配置存储库,因此您无需添加 @EnableJpaRepositories
.
我面临的问题是关于 @Autowire
存储库接口(在我的例子中是 UserRepository),我不知道为什么,但是 @Autowire
失败了。
UserController
class 调用了一个 @Service
class 而这个调用了一个 @Component
(DAO class),DAO class 是 @Autowiring
@Repository
.
Spring 开机主
package com.leagueofsummoners;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.http.HttpStatus;
import com.leagueofsummoners.persistence.interfaces.UserRepository;
@SpringBootApplication
public class LeagueofsummonersApplication {
public static void main(String[] args) {
SpringApplication.run(LeagueofsummonersApplication.class, args);
}
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return (container -> {
ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
container.addErrorPages(error401Page, error404Page, error500Page);
});
}
}
DTO CLASS(实体)
@Entity(name = "user")
@Table(name = "users")
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_user")
private Long idUser;
@Column(nullable = false, name = "summoner_name")
private String summonerName;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String avatar;
@Column(nullable = false)
private String firma;
@Column(nullable = false, name = "permission_level")
private PermissionLevels permissionLevel;
public UserDTO() {
}
存储库接口
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.Repository;
import com.leagueofsummoners.model.dto.UserDTO;
@org.springframework.stereotype.Repository
public interface UserRepository extends Repository<UserDTO, Long> {
Page<UserDTO> findAll(Pageable pageable);
UserDTO findByUsernameIgnoringCase(String username);
UserDTO findByIdUser(int idUser);
}
DAO class(自动装配存储库时失败 class)
@Component
public class UserDAO{
@Autowired
private UserRepository userRepository;
public UserDTO findByUsernameIgnoringCase(String username) {
return this.userRepository.findByUsernameIgnoringCase(username);
}
}
您需要扫描 JpaRepositories
在您的应用程序中添加此注释 Class :
@EnableJpaRepositories("com.leagueofsummoners.persistence.interfaces")
编辑:
为了配置 entityManager
您需要添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
如果您添加此依赖项,它将自动为您配置存储库,因此您无需添加 @EnableJpaRepositories
.