Spring @Component

De Spring Component annotatie wordt gebruikt om een ​​klasse als Component te markeren. Dit betekent dat het Spring-framework deze klassen automatisch detecteert voor dependency injection wanneer annotatie-gebaseerde configuratie en classpath-scanning worden gebruikt.

Spring Component

In begrijpelijke taal is een Component verantwoordelijk voor bepaalde operaties. Het Spring-framework biedt nog drie specifieke annotaties die moeten worden gebruikt bij het markeren van een klasse als Component.

  1. Service: Geeft aan dat de klasse enkele services biedt. Onze hulpprogrammaklassen kunnen worden gemarkeerd als Service-klassen.
  2. Repository: Deze annotatie geeft aan dat de klasse zich bezighoudt met CRUD-operaties, meestal wordt deze gebruikt bij DAO-implementaties die met database-tabellen werken.
  3. Controller: Meestal gebruikt bij webtoepassingen of REST-webdiensten om aan te geven dat de klasse een frontcontroller is en verantwoordelijk is voor het verwerken van gebruikersaanvragen en het retourneren van een geschikte reactie.

Merk op dat al deze vier annotaties zich bevinden in het pakket `org.springframework.stereotype` en deel uitmaken van `spring-context` jar. Meestal zullen onze componentklassen onder een van zijn drie gespecialiseerde annotaties vallen, dus u gebruikt de annotatie `@Component` misschien niet veel.

Voorbeeld van Spring-component

Laten we een zeer eenvoudige Spring Maven-toepassing maken om het gebruik van de Spring Component-annotatie te demonstreren en hoe Spring deze detecteert met op annotaties gebaseerde configuratie en klassenpadscanning. Maak een Maven-project en voeg de volgende afhankelijkheid van de Spring-core toe.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.6.RELEASE</version>
</dependency>

Dat is alles wat we nodig hebben om de kernfuncties van het Spring-framework te krijgen. Laten we een eenvoudige componentklasse maken en deze markeren met de annotatie `@Component`.

package com.journaldev.spring;

import org.springframework.stereotype.Component;

@Component
public class MathComponent {

	public int add(int x, int y) {
		return x + y;
	}
}

Nu kunnen we een op annotaties gebaseerde Spring-context maken en de bean `MathComponent` ervan ophalen.

package com.journaldev.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringMainClass {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
		context.scan("com.journaldev.spring");
		context.refresh();

		MathComponent ms = context.getBean(MathComponent.class);

		int result = ms.add(1, 2);
		System.out.println("Addition of 1 and 2 = " + result);

		context.close();
	}

}

Voer gewoon de bovenstaande klasse uit als een normale Java-toepassing en je zou de volgende uitvoer op de console moeten krijgen.

Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
Addition of 1 and 2 = 3
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy

Heb je de kracht van Spring opgemerkt, we hoefden niets te doen om onze component in de Spring-context te injecteren. De onderstaande afbeelding toont de directorystructuur van ons voorbeeldproject met Spring-componenten. We kunnen ook de componentnaam specificeren en deze vervolgens ophalen uit de Spring-context met dezelfde naam.

@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");

Hoewel ik de @Component-annotatie heb gebruikt met MathComponent, is het eigenlijk een serviceklasse en zouden we de @Service-annotatie moeten gebruiken. Het resultaat zal nog steeds hetzelfde zijn.

Je kunt het project bekijken op onze GitHub Repository.

Referentie: API Doc

Source:
https://www.digitalocean.com/community/tutorials/spring-component