[JAVA] N Dinge, die Sie beim Lesen von "Einführung in den Frühling" und "Einführung in den Frühling" in der Reiwa-Ära beachten sollten

Über diesen Artikel

Wie ich jedes Mal schreibe und sage, gibt es auch jetzt, wenn wir uns 2020 nähern, nur zwei zuverlässige Bücher zum Thema Frühling:

Beide Bücher (im Folgenden als "Bücher" bezeichnet) sind super gute Bücher, aber beide wurden 2016 veröffentlicht und die unterstützte Spring-Version ist so alt wie 4.2.

Die neueste Version per Ende 2019 ist Spring 5.2. In diesem Artikel werde ich einige Punkte vorstellen, auf die Sie beim Lesen der oben genannten Bücher jetzt besonders achten sollten.

Überprüfen Sie das GitHub-Wiki (https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions) auf alle Unterschiede in 4.x-> 5.x. ..

JDK sollte 8 oder höher verwenden

Ab Spring 5.0 beträgt die JDK-Basislinie 8 (Spring 4 basiert auf JDK 6). Ich glaube nicht, dass Leute, die Spring von nun an verwenden möchten, versuchen werden, JDK 6 oder 7 zu verwenden.

Spring 5.2 unterstützt bis zu JDK 14. Weitere Informationen zur Unterstützung der JDK- und Spring-Version finden Sie im GitHub-Wiki (https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions#jdk-version-range). ..

Konstruktorinjektion anstelle von Feldinjektion + @ Autowired sollte abgekürzt werden

Seit Frühjahr 4.2 gibt es drei DI-Methoden.

Beispiel einer Feldinjektion


@Component
public class Hoge {
    @Autowired
    Fuga fuga;
}

Beispiel für Setterinjektion


@Component
public class Hoge {
    private Fuga fuga;

    @Autowired
    public void setFuga(Fuga fuga) {
        this.fuga = fuga;
    }
}

Beispiel einer Konstruktorinjektion


@Component
public class Hoge {
    private final Fuga fuga;

    @Autowired
    public Hoge(Fuga fuga) {
        this.fuga = fuga;
    }
}

Feldinjektion wird häufig in Büchern verwendet. Wahrscheinlich, weil der Umfang der Beschreibung am geringsten ist (möglicherweise aufgrund von Platzbeschränkungen).

Ab Spring 4.3 kann @ Autowired weggelassen werden, wenn nur ein Konstruktor in der Klasse vorhanden ist.

Beispiel einer Konstruktorinjektion (4.3 oder später)


@Component
public class Hoge {
    private final Fuga fuga;

    //Weil es nur einen Konstruktor gibt@Autowired ist optional!
    public Hoge(Fuga fuga) {
        this.fuga = fuga;
    }
}

Sie können Ihre Klasse unveränderlich machen, verwenden Sie also nach Möglichkeit die Konstruktorinjektion.

Verwenden Sie etwas wie "@ GetMapping" anstelle von "@ RequestMapping"

Verwenden Sie "@ RequestMapping", um Controller-Klassenmethoden in Spring MVC zu schreiben.

4.2 oder früher


@Controller
@RequestMapping("/hoge")
public class HogeController {

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index() {
        return "index";
    }
}

Ab Frühjahr 4.3 wurden Anmerkungen für jede HTTP-Anforderungsmethode wie "@ GetMapping" und "@ PostMapping" eingeführt. Sie können es sehr kurz schreiben!

4.3 oder später


@Controller
@RequestMapping("/hoge") //Hier@Request Mapping ist OK
public class HogeController {

    @GetMapping("/index") // @Verwenden Sie XxxMapping!
    public String index() {
        return "index";
    }
}

Schreiben Sie im HTML-Format mit Thymeleaf 3 (nicht XHTML).

Das Buch verwendet Thymeleaf 2. Um einen Bildschirm in Thymeleaf 2 zu schreiben, müssen Sie ihn im XHTML-Format schreiben.

Wenn Sie eine Bibliothek hinzufügen, können Sie sogar 2 im HTML-Format schreiben.

2 oder früher


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>Bildschirm</title>
</head>
<body>
<form action="index.html" th:action="@{findByFirstName}">
Vorname Schlüsselwort:<input type="text" name="firstName" />
    <input type="submit" value="Suche" />
</form>
...

Mit Thymeleaf 3 können Sie standardmäßig im HTML-Format schreiben.

3 oder später


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Bildschirm</title>
</head>
<body>
<form action="index.html" th:action="@{findByFirstName}">
Vorname Schlüsselwort:<input type="text" name="firstName">
    <input type="submit" value="Suche">
</form>
...

Ich bin froh, dass ich / vergessen habe und es gibt keine Laufzeitausnahmen!

Verwenden Sie die WebMvcConfigurer-Schnittstelle anstelle der WebMvcConfigurerAdapter-Klasse

In Spring 4.3 und früheren Versionen erbt beim Erstellen einer Spring MVC-bezogenen Java-Konfiguration häufig die Klasse "WebMvcConfigurerAdapter".

4.3 oder früher


@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        ...
    }
    ...
}

Ab Spring 5.0 ist diese Klasse veraltet und es wird empfohlen, die von dieser Klasse implementierte WebMvcConfigurer-Schnittstelle zu verwenden.

5.Nach 0


@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        ...
    }
    ...
}

Die Klasse "WebMvcConfigurerAdapter" ist eine Klasse, die die Schnittstelle "WebMvcConfigurer" implementiert und alle Methoden mit einer leeren Implementierung überschreibt. Da Java 8 basiert, sind alle Methoden der WebMvcConfigurer-Schnittstelle jetzt Standardmethoden mit leeren Implementierungen. Dies ist das Ende des Jobs, und die Klasse "WebMvcConfigurerAdapter" ist veraltet.

[Quellcode für "WebMvcConfigurer"](https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation /WebMvcConfigurer.java)

Verwenden Sie Bean Validation @ NotBlank anstelle von Hibernate Validator @ NotBlank

Mit der Unterstützung von Java EE 8 ab Spring 5 wurde die Bean Validation-Version von 1.x auf 2.0 (Hibernate Validator 6.0 oder höher) erhöht.

Es ist möglich, Bean Validation 1.x mit Spring 5 zu verwenden, aber im Grunde ist es besser, die neueste Version zu verwenden.

Bean Validation 2.0 fügt eine neue Einschränkungsanmerkung hinzu. Einige davon waren Anmerkungen von Hibernate Validator und wurden in den Bean Validation-Standard aufgenommen. Insbesondere lauten die Anmerkungen wie folgt (alle im Paket "javax.validation.constraints").

Infolgedessen sind die eigenen "@ NotBlank" -, "@ NotEmpty" - und "@ Email" -Pakete von Hibernate Validator (alle "org.hibernate.validator.constraints" -Pakete) veraltet.

Beachten Sie, dass das CrudRepository von Spring Data nicht kompatibel ist.

Ab Spring Data 2.x wurden der Name und der Rückgabewert der in "CrudRepository" definierten Methode geändert.

Die Änderungen umfassen die Unterstützung von "java.util.Optional" und Änderungen des Methodennamens.

Crud Repository vor 1


public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {

	<S extends T> S save(S entity);

	<S extends T> Iterable<S> save(Iterable<S> entities);

	T findOne(ID id);

	boolean exists(ID id);

	Iterable<T> findAll();

	Iterable<T> findAll(Iterable<ID> ids);

	long count();

	void delete(ID id);

	void delete(T entity);

	void delete(Iterable<? extends T> entities);

	void deleteAll();
}

2 oder höher Crud Repository


public interface CrudRepository<T, ID> extends Repository<T, ID> {

	<S extends T> S save(S entity);

	<S extends T> Iterable<S> saveAll(Iterable<S> entities);

	Optional<T> findById(ID id);

	boolean existsById(ID id);

	Iterable<T> findAll();

	Iterable<T> findAllById(Iterable<ID> ids);

	long count();

	void deleteById(ID id);

	void delete(T entity);

	void deleteAll(Iterable<? extends T> entities);

	void deleteAll();
}

Spring Security PasswordEncoder sollte immer explizit festgelegt werden

Vor Spring Security 4 wurde kein Kennwort-Hashing durchgeführt, wenn Sie "PasswordEncoder" nicht explizit angegeben haben.

Ab Spring Security 5 wird "DelegatingPasswordEncoder" verwendet, wenn Sie "PasswordEncoder" nicht explizit angeben. Dies liest das Präfix des in der Datenbank gespeicherten Passworts usw. und delegiert die Verarbeitung an den entsprechenden "PasswordEncoder".

スクリーンショット 2019-12-31 11.03.14.png

Ich glaube nicht, dass jemand in der Produktion "PasswordEncoder" angegeben hat (das möchte ich glauben). Ich denke jedoch, dass es Zeiten gab, in denen ich es der Einfachheit halber nicht im Studiencode angegeben habe. Stellen Sie sicher, dass Sie dies in Spring Security 5.x oder höher angeben. Sie müssen lediglich eine Bean für "PasswordEncoder" definieren. Natürlich sollten in DB usw. gespeicherte Passwörter mit "PasswordEncoder" desselben Algorithmus gehasht werden.

Geben Sie den Passwort-Encoder an


@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    ...
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Bitte beachten Sie, dass sich der Inhalt von Spring Boot stark verändert hat.

Für Spring Boot 1.x-> 2.x gibt es zu viele Änderungen, um w zu schreiben

Auch wenn Sie nur daran denken

···etc. Es kann viele andere geben.

2020-02-12 Nachtrag

Ich werde die Materialien hinzufügen, die auf der JSUG-Studiensitzung vorgestellt wurden. Beide sind wertvolle Materialien, also lesen Sie sie bitte!

Lernsitzungsfolie

@ b1a9idps Blog-Liste

Zusammenfassung

Wenn Sie sich erinnern, werde ich es eins nach dem anderen hinzufügen.

Recommended Posts

N Dinge, die Sie beim Lesen von "Einführung in den Frühling" und "Einführung in den Frühling" in der Reiwa-Ära beachten sollten
Dinge, die Sie beachten sollten, wenn Sie sich für CRuby entscheiden
Dinge, die beim Kombinieren von if-Anweisungen und logischen Operatoren zu beachten sind
Dinge, die zu beachten sind, wenn der Abhängigkeit Krieg hinzugefügt wird
Dinge, die Sie bei der Verwendung der if-Anweisung beachten sollten
Beachten Sie beim Testen privater Methoden in JUnit
Dinge zu beachten, wenn Sie Jekyll unter Windows installieren und Themen laden! !! Brauche tzinfo !!
Beachten Sie Folgendes, wenn Sie Apache PDFBox® mit AWS Lambda verwenden
[Kein Komma (,) in der Adresse! ] Dinge, die Sie beachten sollten, wenn Sie sich für eine Prüfung bei Pearson VUE bewerben
[Für Super-Anfänger] Das Mindestwissen, das Sie mit Hashes und Symbolen berücksichtigen möchten
Vorsichtsmaßnahmen bei der Verwendung von Spring AOP mit Jersery-Ressourcenklassen
Wirf eine Ausnahme und fange, wenn es keinen Handler gibt, der dem Pfad im Frühjahr entspricht
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
Dinge, an die Sie sich erinnern sollten, und Konzepte im Ruby on Rails-Tutorial
Ich habe die Punkte zusammengefasst, die bei der kombinierten Verwendung von Ressourcen und Ressourcen zu beachten sind
[Java Bronze] 5 Probleme zu beachten
Wenn Eclipse den Server nicht starten kann
Einführung in Apache Beam (1) ~ Lesen und Schreiben von Text ~
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
In der Abbildung verstandene Java-Klassen und -Instanzen
In Anbetracht der Einführung der Java-Sprache in der Reiwa-Ära ~ Auswahl eines sicheren SDK
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
Überprüfen Sie, wie Sie das Zeitlimit festlegen, wenn Sie eine Verbindung zu Spring + HikariCP + MySQL herstellen und SQL ausführen