Spring – XML konfigurační soubor a konfigurace anotacemi

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

    • Konfigurace využívající XML (XML based configuration)
      • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
      • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
    • Konfigurace využívající Javu
      • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

XML konfigurační soubor a konfigurace anotacemi
V tomto příspěvku se podíváme na XML konfigurační soubor a konfigurace anotacemi. V tomto případě se používá pro konfiguraci XML soubor, ale pro injektování (vytvoření instance a dosazení do požadované proměnné) se používají anotace (@Autowired, @Service, …).

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Struktura projektu

project
├───src
│   ├───main
│   │   ├───java
│   │   │   └───cz
│   │   │       └───vitfo
│   │   │           │   Main.java
│   │   │           │   MyApplication.java
│   │   │           │
│   │   │           └───service
│   │   │               │   MessageService.java
│   │   │               │   SecurityService.java
│   │   │               │
│   │   │               └───impl
│   │   │                       MessageServiceImpl.java
│   │   │                       SecurityServiceImpl.java
│   │   │
│   │   └───resources
│   │           beans.xml

Vytvoříme si třídu Main.java, ve které vytvoříme kontext Springu. Ve třídě Main.java budeme mít logiku naší aplikace.

beans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

   <context:component-scan base-package="cz.vitfo"></context:component-scan>

</beans>

Main.java

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

		MyApplication application = context.getBean("myApplication", MyApplication.class);
		application.start();

		context.close();
	}
}

MyApplication.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cz.vitfo.service.MessageService;
import cz.vitfo.service.SecurityService;

@Component
public class MyApplication {

	@Autowired
	private MessageService messageService;
	@Autowired
	private SecurityService securityService;

	public void start() {
		String message = messageService.getMessage();
		String encoded = securityService.encode(message);

		System.out.println(message);
		System.out.println(encoded);
	}
}

MessageService.java

public interface MessageService {

	String getMessage();
}

MessageServiceImpl.java

import org.springframework.stereotype.Service;

import cz.vitfo.service.MessageService;

@Service
public class MessageServiceImpl implements MessageService {

	public String getMessage() {
		return "message";
	}
}

SecurityService.java

public interface SecurityService {

	String encode(String text);
}

SecurityServiceImpl.java

import org.springframework.stereotype.Service;

import cz.vitfo.service.SecurityService;

@Service
public class SecurityServiceImpl implements SecurityService {

	private static final String e = "€";
	private static final String s = "§";

	public String encode(String text) {
		text = text.replaceAll("e", e);
		text = text.replaceAll("s", s);
		return text;
	}
}

Výsledek

message
m€§§ag€

V tomto projektu je v souboru beans.xml povolen component scan. To znamená, že Spring projde třídy v projektu a hledá releventní anotace. Např. @Service (specializovaná anotace pro @Component) která označuje Spring komponentu typu service. Pokud takovou najde vytvoří si instanci v kontextu a pokud je pak někde taková třída potřeba (autowiruje se pomocí anotaci @Autowired) dosadí do dané proměnné.

Napsat komentář