webentwicklung-frage-antwort-db.com.de

Die Abhängigkeiten einiger Beans im Anwendungskontext bilden einen Zyklus

Ich arbeite an einer Spring Boot v1.4.2.RELEASE-Anwendung mit JPA.

Ich habe Repository-Schnittstellen und Implementierungen definiert

ARepository

@Repository
public interface ARepository extends CrudRepository<A, String>, ARepositoryCustom, JpaSpecificationExecutor<A> {
}

ARepositoryCustom 

@Repository
public interface ARepositoryCustom {
    Page<A> findA(findAForm form, Pageable pageable);
}

ARepositoryImpl

@Repository
public class ARepositoryImpl implements ARepositoryCustom {
    @Autowired
    private ARepository aRepository;
    @Override
    public Page<A> findA(findAForm form, Pageable pageable) {
        return aRepository.findAll(
                where(ASpecs.codeLike(form.getCode()))
                .and(ASpecs.labelLike(form.getLabel()))
                .and(ASpecs.isActive()),
                pageable);
    }
}

Und ein Service AServiceImpl

@Service
public class AServiceImpl implements AService {
    private ARepository aRepository;
    public AServiceImpl(ARepository aRepository) {
        super();
        this.aRepository = aRepository;
    }
    ...
}

Meine Anwendung beginnt nicht mit der Nachricht:

 **************************** 
 ANWENDUNG NICHT START 
 ********** **************** 

 Beschreibung: 

 Die Abhängigkeiten einiger Beans im Anwendungskontext bilden einen Zyklus: 

 | aRepositoryImpl 
 └─────┘ 

Ich folgte allen Schritten, die in http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.single-repository-behaviour beschrieben sind.

Bitte helfen

Laurent

8
Laurent Maillet

Es gibt eine einfache Lösung für Ihr ursprüngliches Problem: Entfernen Sie einfach @Repository aus ARepositoryCustom und aus ARepositoryImpl . Behalten Sie alle Benennungs- und Schnittstellen-/Klassenhierarchien bei. Sie sind alle in Ordnung.

5

Ich habe Ihren Quellcode getestet und etwas kniffliges gefunden.

Zunächst habe ich mit Ihrem Quellcode den folgenden Fehler erhalten:

There is a circular dependency between 1 beans in the application context:
- ARepositoryImpl (field private test.ARepository test.ARepositoryImpl.aRepository)
- aRepositoryImpl

Dann denke ich, dass Spring "verwirrt" zwischen ARepository (JPA-Repository) und ARepositoryImpl (benutzerdefiniertes Repository) ist. Also würde ich vorschlagen, dass Sie umbenennenARepository zu etwas anderem wie BRepository. Es hat funktioniert, wenn ich den Klassennamen umbenannt habe.

Laut offizieller Dokumentation von Spring Data ( https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ ): 

Diese Klassen müssen der Namenskonvention folgen, indem das Attribut repository-impl-postfix des Namespace-Elements an den Namen der gefundenen Repository-Schnittstelle angehängt wird. Dieses Postfix ist standardmäßig impl

2
Phat H. VU