gpt4 book ai didi

java - UnsatisfiedDependencyException 在构造函数上 Autowiring 并且设置不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:28 26 4
gpt4 key购买 nike

我创建了一个自定义存储库。在这个存储库中,我需要访问标准存储库(findAll)的一些方法,所以我添加了

我使用了 Spring Boot

@EntityScan(basePackageClasses = {UserAgendaApplication.class, Jsr310JpaConverters.class})
@SpringBootApplication
public class UserAgendaApplication {

public static void main(String[] args) {
SpringApplication.run(UserAgendaApplication.class, args);
}
}


public interface UsersRepositoryCustom {
public Page<Users> customSearch(UserSearch UserSearch, Pageable page);
}



public interface UsersRepository extends JpaRepository<Users, Integer>, JpaSpecificationExecutor<Users>, UsersRepositoryCustom {

}


@Repository
public class UsersRepositoryImpl implements UsersRepositoryCustom {

@PersistenceContext
private EntityManager em;

private final UsersRepository usersRepository;

@Autowired
public UsersRepositoryImpl(final UsersRepository usersRepository){
this.usersRepository=usersRepository;
}

@Override
public Page<Users> customSearch(UserSearch UserSearch, Pageable page) {
...
return usersRepository.findAll(specification, page);

}

}

@Service
public class UsersServiceImpl implements UsersService {

@Autowired
public UsersServiceImpl(UsersRepository usersRepository) {
this.usersRepository = usersRepository;
}

private UsersRepository usersRepository;

@Override
public Page<Users> customSearch(UserSearch userSearch, Pageable page) {
usersRepository.customSearch(userSearch, page);
...
}

}

在 Controller 中

@Controller
public class UsersController {

private final UsersService usersService;

@Autowired
public UsersController( final usersService usersService){
this.usersService=usersService;
}

}

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersController': Unsatisfied dependency expressed through field 'usersService';
nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersServiceImpl' defined in file [/home/alpha/Development/project/UserAgenda/build/classes/main/com/alpha/userAgenda/service/UsersServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'usersRepositoryImpl': Bean with name 'usersRepositoryImpl' has been injected into other beans [usersRepository] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.

我尝试在 Controller 和 UsersRepositoryImpl 中的 setUsersRepository 上放置 Autowiring ,但得到相同的错误

编辑

public abstract class UsersRepositoryCustom extends SimpleJpaRepository<Users, Integer>

public Page<Users> customSearch(UserSearch userSearch, Pageable page) {
...
}

因为我使用SimpleJpaRepository,所以我不再需要UserRepository,但我需要在UersRepositoryCustom中添加此代码

private final EntityManager entityManager;
private final JpaEntityInformation<Users, Integer> entityInformation;

@Autowired
public UsersRepositoryCustom(final JpaEntityInformation<Users, Integer> entityInformation,
final EntityManager entityManager) {
super(entityInformation, entityManager);
this.entityManager = entityManager;
this.entityInformation = entityInformation;
}

在实现 UsersService 的 UsersServiceImpl 中,我有

@Autowired
public UsersRepositoryCustom usersRepositoryCustom;

我明白了

.UsersRepositoryImpl 中构造函数的参数 0 需要类型为“org.springframework.data.jpa.repository.support.JpaEntityInformation”的 bean,但无法找到。

编辑2

梯度配置

buildscript {
ext {
springBootVersion = '2.0.0.M2'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

apply plugin: 'application'
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

mainClassName = 'com.alpha.useragenda.UserAgendaApplication'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}

dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')

compile group: 'org.hsqldb', name: 'hsqldb', version: '2.0.0'
compile group: 'org.postgresql', name: 'postgresql', version: '42.1.1'

compile group: 'org.webjars', name: 'bootstrap', version: '3.3.7'
compile group: 'org.webjars.bower', name: 'bootstrap-table', version: '1.11.1'
compile('org.springframework.boot:spring-boot-devtools')
testCompile('org.springframework.boot:spring-boot-starter-test')
}

tasks.withType(JavaCompile) {
options.compilerArgs = ["-Xlint:unchecked", "-Xlint:deprecation", "-parameters"]
}

最佳答案

我认为你最好的办法就是使用这个

package stack.overflow;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

public interface UsersCrud extends CrudRepository<Users, Long> {

//My other query prototypes here

@Query("select c1 from t1")
public Object customQuery();
}

通过这种方式,您可以以最小的努力获得特殊查询。否则,我建议遵循OP评论中给出的建议(保留存储库并处理服务中的特殊情况

关于java - UnsatisfiedDependencyException 在构造函数上 Autowiring 并且设置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com