required a bean of type 'java.lang.String' that could not be found.

8u3631984

Bekanntes Mitglied
Hallo zusammen.
ICh bekomme beim Start meiner Application folgenden Fehler :
Java:
required a bean of type 'java.lang.String' that could not be found.

Hier mein Klasse :
Java:
@Service
@AllArgsConstructor
@Log4j2
public class SamsDownloadService implements DownloadService {

    private DownloadHistoryService downloadHistoryService;
    @Value("${importer.downloadFolder}")
    private String downloadFolder;

und hier meine application.yml
Java:
spring:
  profiles:
    active: test

application:
  title: MatchDataImporterApp
  version: 1.0-SNAPSHOT

server:
  port: 8080

importer:
  downloadFolder: test-download

Kann mir jemand helfen ?
 

DrPils

Bekanntes Mitglied
Bin nicht so fit in Spring, aber ich glaube durch @AllArgsConstructor, wird halt ein Constructor mit DownloadHistoryService und String erzeugt.
Versuch mal @RequiredArgsConstructor und setz den DownloadService auf final.
Oder eben den Konstruktor selbst schreiben
 

httpdigest

Top Contributor
Wobei ich die zweite Stackoverflow-Antwort mit lombok.copyableAnnotations besser finde: https://stackoverflow.com/questions...bok-and-constructor-injection#answer-67042439
Denn der String bzw. das Property ist ja weiterhin eine Abhängigkeit deiner Klasse, sollte also auch über den Konstruktor gesetzt werden.
Das erleichtert dann zum Beispiel auch das unit-testen dieser Klasse, da du sie einfach mit entsprechenden Property-Werten in einem einfachen JUnit/TestNG Test instanziieren kannst.
Die Lösung mit RequiredArgsConstructor sorgt ja jetzt dafür, dass zwei Injections passieren: Einmal über den Konstruktor für _nur_ den DownloadHistoryService und dann nochmal über das Field (für den Spring Value bzw. den String).
 

KonradN

Super-Moderator
Mitarbeiter
Sollte es nicht auch gehen, dass man sowohl @AllArgsConstructor und @RequiredArgsConstructor verwendet? Dann hat man zum einen das, was Spring braucht und für Tests kann man dann auch den AllArgsConstructor nutzen. Ich denke, das wäre vermutlich meine Lösung.
 

DrPils

Bekanntes Mitglied
Sollte es nicht auch gehen, dass man sowohl @AllArgsConstructor und @RequiredArgsConstructor verwendet? Dann hat man zum einen das, was Spring braucht und für Tests kann man dann auch den AllArgsConstructor nutzen. Ich denke, das wäre vermutlich meine Lösung.
Bei mehreren Konstruktoren geht ja implizites Autowired nicht, dann muss man @Autowired ueber die Fields setzen, waere das dann field Injection, oder regelt das Lombock irgendwie intern?

Edit: Link von @httpdigest lesen hilft @AllArgsConstructor(onConstructor = @__(@Autowired))
 

httpdigest

Top Contributor
Meine aktuelle Präferenz ist: Nur RequiredArgsConstructor verwenden und alle Felder, die der Service bzw. das Bean selbst nicht als internen Zustand braucht und modifiziert, sondern fixe Input-Parameter sind, immer final machen und nur einen Konstruktor zu haben.
Wenn man dann eben sowas braucht wie in dieser Situation, dass ein Parameter eine Annotation eines Feldes übertragen bekommen muss (wie hier eben das Value), dann muss man das in die lombok config eintragen.
 

KonradN

Super-Moderator
Mitarbeiter
Bei mehreren Konstruktoren geht ja implizites Autowired nicht, dann muss man @Autowired ueber die Fields setzen, waere das dann field Injection, oder regelt das Lombock irgendwie intern?
Evtl. einmal https://www.baeldung.com/spring-injection-lombok anschauen.

Das Problem ist ja, dass bei mehreren Konstruktoren Spring einen Fehler wirft, wenn da kein Konstruktor eine Annotation hat mit @Autowired. Und das kann man so setzen, wie das der Link von @httpdigest bereits gezeigt hat und wie es auch der baeldung Beitrag aufzeigt:
@RequiredArgsConstructor(onConstructor = @__(@Autowired))

Damit hat dann der Konstruktor Deiner Wahl eben genau diese Annotation (und der aufbau wird in dem Baeldung beitrag etwas erläutert - für das Verständnis)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Sporadisch "Required String parameter 'sqlquery' is not present" Frameworks - Spring, Play, Blade, Vaadin & Co 2
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z SortedSet mit Comparator als Bean-Property mit ManyToMany Beziehung erzeugt Exception Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring MVC -> Bean im Front-End ( Tomcat ) und Back-End teilen. Frameworks - Spring, Play, Blade, Vaadin & Co 5
C Spring findet Bean nicht Frameworks - Spring, Play, Blade, Vaadin & Co 0
B Spring bean initialisierungs probleme Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Spring kann Bean über Konstruktor nicht erstellen Frameworks - Spring, Play, Blade, Vaadin & Co 9
J spring kann eine bean nicht erzeugen Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Java Bean Validation und Spring Webflow Frameworks - Spring, Play, Blade, Vaadin & Co 0
J Spring: Referencing Bean mit NoSuchBeanDefinitionException Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Spring: Den Context einer bean auslesen... Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Bean aus Datei referenzieren? Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Spring IoC: Bean mit typisierter Collection Frameworks - Spring, Play, Blade, Vaadin & Co 4
ExceptionOfExpectation Spring Boot Thymeleaf Input Type=radio für Enum Property Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring type conversion von String nach DateTime Frameworks - Spring, Play, Blade, Vaadin & Co 2

Ähnliche Java Themen

Neue Themen


Oben