Tutorials  /  Security

Spring Annotationen - Java Entwicklung meistern

Ccentron Redaktion · Februar 2024 ·7 Min. Lesezeit ·Security, Tutorial

Spring-Annotationen ermöglichen es uns, Abhängigkeiten zu konfigurieren und Abhängigkeitsinjektion durch Java-Programme zu implementieren.

Überblick über Spring-Annotationen

Das Spring-Framework implementiert und fördert das Prinzip der Inversionssteuerung (IOC) oder Abhängigkeitsinjektion (DI) und ist tatsächlich ein IOC-Container. Traditionell erlaubt Spring einem Entwickler, Abhängigkeiten von Beans mit einer XML-basierten Konfiguration zu verwalten. Es gibt eine alternative Methode, um Beans und ihre Abhängigkeiten zu definieren. Diese Methode ist eine Java-basierte Konfiguration. Im Gegensatz zum XML-Ansatz ermöglicht die Java-basierte Konfiguration es Ihnen, Bean-Komponenten programmatisch zu verwalten. Deshalb wurden Spring-Annotationen eingeführt. In diesem Artikel werden wir die am häufigsten verwendeten Spring-Annotationen erkunden und uns einige Beispielprogramme ansehen.

SEC

Passende Infrastruktur bei centron

Absicherung endet nicht beim Server: Cloud Firewalls filtern den Datenverkehr vor der VM – zentral verwaltet, ohne Aufpreis je Regel. Cloud Firewalls ansehen →

Liste der Spring-Annotationen

Einige der Kernframework-Annotationen von Spring sind:

@Configuration

Wird verwendet, um anzugeben, dass eine Klasse eine oder mehrere @Bean-Methoden deklariert. Diese Klassen werden vom Spring-Container verarbeitet, um Bean-Definitionen zu generieren und Dienstanfragen für diese Beans zur Laufzeit zu bedienen.

@Bean

Gibt an, dass eine Methode einen von Spring verwalteten Bean erzeugt. Dies ist eine der am häufigsten verwendeten und wichtigen Spring-Annotationen. Die @Bean-Annotation kann auch mit Parametern wie name, initMethod und destroyMethod verwendet werden.

  • name – erlaubt Ihnen, dem Bean einen Namen zu geben
  • initMethod – ermöglicht Ihnen, die Methode zu wählen, die beim Registrieren des Kontexts aufgerufen wird
  • destroyMethod – ermöglicht Ihnen, die Methode zu wählen, die beim Herunterfahren des Kontexts aufgerufen wird

Zum Beispiel:

Code
@Configuration
public class AppConfig {

    @Bean(name = "comp", initMethod = "turnOn", destroyMethod = "turnOff")
    Computer computer(){
        return new Computer();
    }
}
public class Computer {

    public void turnOn(){
        System.out.println("Betriebssystem laden");
    }
    public void turnOff(){
        System.out.println("Alle Programme schließen");
    }
}

@PreDestroy und @PostConstruct sind alternative Wege für die Bean-initMethod und destroyMethod. Sie können verwendet werden, wenn die Bean-Klasse von uns definiert ist. Zum Beispiel;

Code
 public class Computer {

    @PostConstruct
    public void turnOn(){
        System.out.println("Betriebssystem laden");
    }

    @PreDestroy
    public void turnOff(){
        System.out.println("Alle Programme schließen");
    }
}

@ComponentScan

Konfiguriert Anweisungen zum Scannen von Komponenten für die Verwendung mit @Configuration-Klassen. Hier können wir die Basispakete angeben, die nach Spring-Komponenten gescannt werden sollen.

@Component

Gibt an, dass eine annotierte Klasse eine „Komponente“ ist. Solche Klassen werden als Kandidaten für die automatische Erkennung bei der Verwendung von annotationsbasierter Konfiguration und Klassenpfad-Scanning betrachtet.

@PropertySource

Bietet einen einfachen deklarativen Mechanismus, um eine Eigenschaftsquelle zur Umgebung von Spring hinzuzufügen. Es gibt eine ähnliche Annotation für das Hinzufügen eines Arrays von Eigenschaftsquellendateien, z. B. @PropertySources.

@Service

Gibt an, dass eine annotierte Klasse ein „Service“ ist. Diese Annotation dient als Spezialisierung von @Component und ermöglicht es Implementierungsklassen, durch Klassenpfad-Scanning automatisch erkannt zu werden.

@Repository

Gibt an, dass eine annotierte Klasse ein „Repository“ ist. Diese Annotation dient als Spezialisierung von @Component und wird für die Verwendung mit DAO-Klassen empfohlen.

@Autowired

Die Spring-Annotation @Autowired wird für die automatische Injektion von Beans verwendet. Die Spring-Annotation @Qualifier wird in Verbindung mit Autowired verwendet, um Verwirrung zu vermeiden, wenn wir zwei oder mehr Beans für denselben Typ konfiguriert haben.

Spring MVC-Annotationen

Einige der wichtigen Spring-MVC-Annotationen sind:

  • @Controller
  • @RequestMapping
  • @PathVariable
  • @RequestParam
  • @ModelAttribute
  • @RequestBody und @ResponseBody
  • @RequestHeader und @ResponseHeader

Sie können mehr darüber im Spring-MVC-Tutorial erfahren.

Spring-Annotationen für das Transaktionsmanagement

@Transactional ist die Spring-deklarative Transaktionsmanagement-Annotation, mehr dazu unter Spring MVC Hibernate.

Spring-Sicherheitsannotationen

@EnableWebSecurity wird zusammen mit der @Configuration-Klasse verwendet, um die Spring-Sicherheitskonfiguration zu definieren, mehr dazu unter Spring Security Beispiel.

Spring Boot-Annotationen

@SpringBootApplication

@EnableAutoConfiguration

Mehr dazu unter Spring Boot Beispiel.

Spring-Annotationsbeispiel

Lassen Sie uns ein einfaches Beispiel ansehen, in dem wir Spring-Annotationen in unserer Anwendung verwenden. Das untenstehende Bild veranschaulicht mein Spring-Annotations-Beispielprojekt.

Spring Framework-Abhängigkeiten

Ich habe das Maven-Projekt erstellt und Spring Core Framework-Abhängigkeiten hinzugefügt.

Code
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.journaldev.spring</groupId>
        <artifactId>spring-annotations</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>Spring-Annotationen</name>

        <properties>
            <spring.framework>4.3.0.RELEASE</spring.framework>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.framework}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.framework}</version>
            </dependency>

        </dependencies>

    </project>

Damit werden alle Spring Core JARs für unser Projekt eingebunden.

Komponentenklassen

Der nächste Schritt besteht darin, Komponentenklassen zu erstellen. Hier imitiere ich mehrere Datenbankkomponenten, eine für MySQL und eine weitere für Oracle.

DataBaseDriver ist die Basisschnittstelle, die wir implementieren werden.

Go
package com.journaldev.drivers;

public interface DataBaseDriver {
    public String getInfo();
}

DataBaseDriver ist die Basisschnittstelle, die wir implementieren werden.

Go
package com.journaldev.drivers;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:mysqldatabase.properties")
public class MySqlDriver implements DataBaseDriver {

    @Value("${databaseName}")
    private String databaseName;
    @Value("${disableStatementPooling}")
    private String disableStatementPooling;

    public String getInfo() {
        return "[ Treiber: mySql" +
                ", Datenbankname: " + databaseName +
                ", disableStatementPooling: " + disableStatementPooling +
                " ]";
    }
}

Beachten Sie die Verwendung der @Component-Annotation, um dem Spring-Framework anzuzeigen, diese Klasse als Komponente zu behandeln. Wir verwenden auch @PropertySource- und @Value-Annotationen, Spring wird diese zur Laufzeit verwenden, um diese Variablenwerte aus der angegebenen Eigenschaftsdatei zu injizieren und festzulegen. Unten sind die Eigenschaften in der mysqldatabase.properties-Datei deklariert.

Code
databaseName=schule
disableStatementPooling=true
Go
package com.journaldev.drivers;

public class OracleDriver implements DataBaseDriver {

    protected String url;
    protected String user;
    protected String password;
    protected String driver;
    protected Integer port;

    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getInfo() {
        return "[ Treiber: Oracle" +
                ", url: " + url +
                ", port; " + port +
                ", Benutzer: " + user +
                ", Passwort: " + password +
                ", Treiber: " + driver +
                " ] ";
    }
}
Go
package com.journaldev.drivers;

public class OracleDriver implements DataBaseDriver {

    protected String url;
    protected String user;
    protected String password;
    protected String driver;
    protected Integer port;

    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getInfo() {
        return "[ Treiber: Oracle" +
                ", url: " + url +
                ", port; " + port +
                ", Benutzer: " + user +
                ", Passwort: " + password +
                ", Treiber: " + driver +
                " ] ";
    }
}

OracleDriver ist ein einfacher Bean, wir verwenden eine Serviceklasse, um Eigenschaften in diesen Bean zu injizieren.

Spring Serviceklasse

Go
package com.journaldev.service;

import com.journaldev.drivers.DataBaseDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    @Qualifier("oracleDriver")
    private DataBaseDriver dataBaseDriver;

    public String getDriverInfo(){
        return dataBaseDriver.getInfo();
    }
}

Hier verwenden wir die @Service-Annotation, um dem Spring-Framework anzuzeigen, diese als Serviceklasse zu behandeln. Dann verwenden wir die @Autowired- und @Qualifier("oracleDriver")-Annotationen, um dem Spring-Framework mitzuteilen, dass es den Bean mit dem Namen oracleDriver in die Klassenvariable dataBaseDriver injizieren soll. Beachten Sie, dass wir diesen Spring-Bean noch nicht erstellt haben.

Spring Beans

Der letzte Schritt besteht darin, unsere Spring-Beans und Konfigurationsklassen zu erstellen, um alles zusammenzufügen.

Go
package com.journaldev.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.drivers.MySqlDriver;
import com.journaldev.drivers.OracleDriver;

@Configuration
@ComponentScan("com.journaldev")
@PropertySource("classpath:oracledatabase.properties")
public class AppConfig {

    @Autowired
    Environment environment;

    @Bean
    DataBaseDriver oracleDriver() {
        OracleDriver oracleDriver = new OracleDriver();
        oracleDriver.setDriver(environment.getProperty("db.driver"));
        oracleDriver.setUrl(environment.getProperty("db.url"));
        oracleDriver.setPort(Integer.parseInt(environment.getProperty("db.port")));
        oracleDriver.setUser(environment.getProperty("db.user"));
        oracleDriver.setPassword(environment.getProperty("db.password"));

        return oracleDriver;
    }

    @Bean
    DataBaseDriver mysqlDriver() {
        return new MySqlDriver();
    }
}

Beachten Sie die Bean-Definition für oracleDriver. In dieser Methode lesen wir Eigenschaften aus der oracledatabase.properties-Datei, die durch das Spring-Framework der Umgebungsvariable zugewiesen wird. Hier sind die Eigenschaften definiert in der oracledatabase.properties-Datei.

Code
db.url=localhost
db.port=4444
db.user=vasiliy
db.password=yilisav
db.driver=driver_name

Unser Spring-Annotations-Beispielprojekt ist nun bereit zum Testen. Zusammenfassend haben wir folgende Schritte durchgeführt:

  • Maven-Projekt erstellt und benötigte Spring-Abhängigkeiten hinzugefügt.
  • Komponentenklassen erstellt und Eigenschaften aus einer Ressourcendatei in deren Variablen injiziert.
  • Wenn wir eine Drittanbieterkomponente haben, können wir eine Serviceklasse verwenden, um Abhängigkeiten in sie zu injizieren. Genau wie wir es für OracleDriver durch die UserService-Klasse gemacht haben.
  • Schließlich haben wir die Konfigurationsklasse erstellt, um Spring-Beans zu definieren und das Basispaket für das Scannen von Spring-Komponentenklassen festzulegen und sie zu konfigurieren.

Testen des Spring-Annotations-Beispiels

Hier ist unsere Hauptklasse, um unser Spring-Annotations-Beispielprojekt zu testen.

Go
package com.journaldev;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

import com.journaldev.config.AppConfig;
import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.service.UserService;

public class Main {
    public static void main(String[] args) {
        AbstractApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class);

        DataBaseDriver oracle = appContext.getBean("oracleDriver", DataBaseDriver.class);
        DataBaseDriver mysql = appContext.getBean("mysqlDriver", DataBaseDriver.class);

        System.out.println("Oracle Treiberinfo:");
        System.out.println(oracle.getInfo());

        System.out.println("MySQL Treiberinfo:");
        System.out.println(mysql.getInfo());
        System.out.println("UserService Informationen");
        UserService userService = appContext.getBean(UserService.class);
        System.out.println(userService.getDriverInfo());

        appContext.close();
    }
}

Das untenstehende Bild zeigt die erzeugte Ausgabe. Beachten Sie, dass wir kein Logging-Framework konfiguriert haben, daher wird das gesamte Logging des Spring-Frameworks in roter Farbe in der Konsole gedruckt.

Spring annotations example

Das war eine kurze Einführung in Spring-Annotationen. Ich habe hier die meisten der wichtigen Annotationen aufgelistet, aber es gibt noch viele weitere für spezifische Aufgaben zu meistern.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Security
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren